Data Mining & Machine Learning for analysing misdemeanours and crimes recorded by the french police and gendarmerie since 1996

Auteur : Gaspard Jeannerot
Temps de réalisation :
Sur temps libre entre Février - Juin 2020

Objectif :
Dans un premier temps, exploiter des données gouvernementales afin de montrer des tendances, et/ou des évolutions potentielles concernant les crimes et les délits en France. Dans un second temps, développer plusieurs algorithmes d'apprentissage automatique de manière empirique pour prévoir l'apparition des crimes et délits en France.

Préambule

Après avoir visionné plusieurs vidéos (première, deuxième) concernant la crise des migrants en Europe, j'ai pris conscience que le monde dans lequel nous vivions pouvait très rapidement évoluer. Pire, en essayant de chercher à comprendre ce phénomène et de trouver des causes et des raisons, j'ai rapidement compris qu'un individu comme moi était incapable de pouvoir arranger les choses.

Étant une personne appréciant une vie stable, j'ai essayé de déterminer si "cela" pouvait un jour m'arriver. Puis en prenant du recul sur cette situation, une question m'est survenue : suis je en danger là où j'habite ?

Afin d'apporter des éléments réalistes et concrets, j'ai essayé de chercher quels pouvaient être les facteurs pouvant me mener à une situation ou à un environnement dangereux. Mais avant cela, il m'a fallu comprendre et définir comment évaluer des danger. Dans ce travail, je le définis comme tout acte humain volontaire mettant en péril la sureté (ou stabilité) et pouvant entrainer ou exposer mes proches, mon entourage, à des conséquences préjudiciables.

Pour factuellement déterminer ce "danger", j'ai réfléchi à comment mesurer les actes nuisibles à mon échelle et la réponse a été simple : en analysant les crimes et les délits enregistrés dans mon pays.

Table des matières

1. Préparation des données pour l'analyse
1.1. Importations des outils
1.2. Importations du Jeu de donnée
1.3. Transposition des données
1.4. Gestion multiple des feuilles
1.5. Récupération du champ date
1.6. Fixation des types de données
1.7. Colonnes inutilisées
2. Analyse du jeu de données
2.1. France Métropolitaine
2.2. Crimes et délit par département
2.3. Analyse focalisée
   2.3.1. Cambriolage
   2.3.1. Homicides
   2.3.1. Vols
3. Machine Learning
3.1. Cas d’étude
3.2. Industrialisation du processus de prédiction
3.3. Analyse focalisée
3.4. Prédiction
4. Synthèse
4.1. Conclusion (SWOT)
4.2. Bilan

1. Préparation des données pour l'analyse / Preparing the data for analysis

Source :

1.1. Importation des outils / Tools import

In [1]:
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

sns.set(color_codes=True)

1.2. Importation du Jeu de donnée / DataSet import

In [2]:
### Generique variables definition to import
source = 'source/'
xl_misdemeanours_crimes_path = source + 'tableaux-4001-ts.xlsx'
xl_population_path = source + 'estim-pop-dep-sexe-gca-1975-2020.xls'

### Excel file import
crime_xl_data = pd.ExcelFile(xl_misdemeanours_crimes_path)
population_xl_data = pd.ExcelFile(xl_population_path)

### Get a look on sheet pages in the excel
print(crime_xl_data.sheet_names)
['France_Entière', 'France_Métro', '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '2A', '2B', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '90', '91', '92', '93', '94', '95', '971', '972', '973', '974', '975', '976', '977', '978', '986', '987', '988']

Le jeu de donnée est composé de plusieurs pages qui peuvent être traitées de manière indépendante. Nous allons nous focaliser sur la feuille "France métropolitaine".

In [3]:
# Define France metropolitaine
current_sheet = crime_xl_data.sheet_names[1]

# Read one sheet to begin ('France_Métro') --> libellée index to write minus two lines
df = pd.read_excel(crime_xl_data, current_sheet, index_col = 'libellé index')

# Examine the head of the DataFrame
df.head(3)
Out[3]:
Index 2020_05 2020_04 2020_03 2020_02 2020_01 2019_12 2019_11 2019_10 2019_09 ... 1996_10 1996_09 1996_08 1996_07 1996_06 1996_05 1996_04 1996_03 1996_02 1996_01
libellé index
Règlements de compte entre malfaireurs 1 2 4 14 7 8 5 5 4 12 ... 4 7 9 10 7 5 6 8 7 8
Homicides pour voler et à l'occasion de vols 2 4 2 2 0 1 3 0 0 3 ... 9 11 7 16 12 6 13 10 11 12
Homicides pour d'autres motifs 3 47 55 49 54 52 66 70 75 64 ... 72 56 62 90 99 68 72 75 55 69

3 rows × 294 columns

Le jeu de donnée possède des données temporelles en tant que dimensions. Afin de rendre les variables plus exploitables, nous allons opérer à une transformation de transposition. De plus afin de pouvoir faciliter la visualisation de nos prochains graphiques, nous allons aussi en profiter pour dissocier le champ date en années et mois et réindexer le jeu de donnée.

1.3. Transposition des données / Transpose Data and get date values

In [4]:
# Drop init 'index' columns, and Transpose Data
df = df.drop(columns=['Index'])
df = df.T
df.head()
Out[4]:
libellé index Règlements de compte entre malfaireurs Homicides pour voler et à l'occasion de vols Homicides pour d'autres motifs Tentatives d'homicides pour voler et à l'occasion de vols Tentatives homicides pour d'autres motifs Coups et blessures volontaires suivis de mort Autres coups et blessures volontaires criminels ou correctionnels Prises d'otages à l'occasion de vols Prises d'otages dans un autre but Sequestrations ... Banqueroutes, abus de biens sociaux et autres délits de société Index non utilisé Index non utilisé Prix illicittes, publicité fausse et infractions aux règles de la concurrence Achats et ventes sans factures Infractions à l'exercice d'une profession règlementée Infractions au droit de l'urbanisme et de la construction Fraudes fiscales Autres délits économiques et financiers Autres délits
2020_05 2 4 47 3 230 10 21670 10 9 279 ... 102 0 0 92 3 75 284 33 710 10252
2020_04 4 2 55 3 178 4 15904 5 2 168 ... 42 0 0 59 1 27 102 20 446 5928
2020_03 14 2 49 1 175 10 16735 5 10 263 ... 64 0 0 59 3 63 246 44 807 7781
2020_02 7 0 54 9 264 11 21430 8 18 331 ... 102 0 0 82 5 126 389 61 1465 11554
2020_01 8 1 52 12 249 15 23468 12 9 358 ... 142 0 0 55 3 108 350 62 1271 12256

5 rows × 107 columns

Une fois les données transposées, nous pouvons facilement nous rendre compte que nous avons un problème de typage concernant l'index. Elle n'est pas considérée comme un type datetime. Corrigeons cela. Il va aussi falloir tenir compte du document original et des multiples pages.

1.4. Gestion multiples des feuilles xl crime

In [5]:
df_all = pd.DataFrame(columns=df.columns.values)
df_all['departement'] = np.nan

all_name_sheet = crime_xl_data.sheet_names
invalid_sheet = ['France_Entière','France_Métro']
all_name_sheet = [e for e in all_name_sheet if e not in invalid_sheet]

for i in all_name_sheet:
    df_tmp = pd.read_excel(crime_xl_data, sheet_name=str(i), index_col = 'libellé index')
    df_tmp = df_tmp.drop(columns=['Index'])
    df_tmp = df_tmp.T
    df_tmp['departement'] = str(i)
    df_all = df_all.append(df_tmp)

df_all.departement = df_all.departement.astype(str)
df_all.head()
Out[5]:
libellé index Règlements de compte entre malfaireurs Homicides pour voler et à l'occasion de vols Homicides pour d'autres motifs Tentatives d'homicides pour voler et à l'occasion de vols Tentatives homicides pour d'autres motifs Coups et blessures volontaires suivis de mort Autres coups et blessures volontaires criminels ou correctionnels Prises d'otages à l'occasion de vols Prises d'otages dans un autre but Sequestrations ... Index non utilisé Index non utilisé Prix illicittes, publicité fausse et infractions aux règles de la concurrence Achats et ventes sans factures Infractions à l'exercice d'une profession règlementée Infractions au droit de l'urbanisme et de la construction Fraudes fiscales Autres délits économiques et financiers Autres délits departement
2020_05 0 0 1 0 0 0 135 0 0 2 ... 0 0 3 0 0 2 0 0 96 01
2020_04 0 0 0 0 3 0 131 0 0 1 ... 0 0 0 0 1 1 0 0 52 01
2020_03 0 0 0 0 0 1 107 0 0 2 ... 0 0 0 0 0 3 0 3 46 01
2020_02 0 0 0 0 0 1 123 1 0 2 ... 0 0 0 0 1 5 1 2 83 01
2020_01 0 0 0 0 0 0 134 0 0 1 ... 0 0 0 0 0 4 0 1 80 01

5 rows × 108 columns

1.5. Récupération du champ date

Mettons à jour l'index du jeu de donnée pour qu'il puisse correspondre au type Datetime. Cela permettra de faciliter sa visualisation plus tard.

1.5.1. Sur une feuille

In [6]:
# Sur le jeu de donnée France métropolitaine
# Reset index, Get Year, Get Month
df = df.reset_index()
df['year'] = df['index'].astype(str).str[0:4]
df['month'] = df['index'].astype(str).str[5:7]

# Define new date column
combined = df.year.str.cat(df.month,sep=' ')
df['date'] = pd.to_datetime(combined)

# Drop 'index' column and set new index on date
df = df.drop(columns='index')
df = df.set_index('date')

df.head()
Out[6]:
libellé index Règlements de compte entre malfaireurs Homicides pour voler et à l'occasion de vols Homicides pour d'autres motifs Tentatives d'homicides pour voler et à l'occasion de vols Tentatives homicides pour d'autres motifs Coups et blessures volontaires suivis de mort Autres coups et blessures volontaires criminels ou correctionnels Prises d'otages à l'occasion de vols Prises d'otages dans un autre but Sequestrations ... Index non utilisé Prix illicittes, publicité fausse et infractions aux règles de la concurrence Achats et ventes sans factures Infractions à l'exercice d'une profession règlementée Infractions au droit de l'urbanisme et de la construction Fraudes fiscales Autres délits économiques et financiers Autres délits year month
date
2020-05-01 2 4 47 3 230 10 21670 10 9 279 ... 0 92 3 75 284 33 710 10252 2020 05
2020-04-01 4 2 55 3 178 4 15904 5 2 168 ... 0 59 1 27 102 20 446 5928 2020 04
2020-03-01 14 2 49 1 175 10 16735 5 10 263 ... 0 59 3 63 246 44 807 7781 2020 03
2020-02-01 7 0 54 9 264 11 21430 8 18 331 ... 0 82 5 126 389 61 1465 11554 2020 02
2020-01-01 8 1 52 12 249 15 23468 12 9 358 ... 0 55 3 108 350 62 1271 12256 2020 01

5 rows × 109 columns

1.5.2. Sur toutes les feuilles

In [7]:
# Sur le jeu de donnée complet
# Reset index, Get Year, Get Month
df_all = df_all.reset_index()
df_all['year'] = df_all['index'].astype(str).str[0:4]
df_all['month'] = df_all['index'].astype(str).str[5:7]

# Define new date column
combined = df_all.year.str.cat(df_all.month,sep=' ')
df_all['date'] = pd.to_datetime(combined)

# Drop 'index' column and set new index on date
df_all = df_all.drop(columns='index')
df_all = df_all.set_index('date')

df_all.head()
Out[7]:
libellé index Règlements de compte entre malfaireurs Homicides pour voler et à l'occasion de vols Homicides pour d'autres motifs Tentatives d'homicides pour voler et à l'occasion de vols Tentatives homicides pour d'autres motifs Coups et blessures volontaires suivis de mort Autres coups et blessures volontaires criminels ou correctionnels Prises d'otages à l'occasion de vols Prises d'otages dans un autre but Sequestrations ... Prix illicittes, publicité fausse et infractions aux règles de la concurrence Achats et ventes sans factures Infractions à l'exercice d'une profession règlementée Infractions au droit de l'urbanisme et de la construction Fraudes fiscales Autres délits économiques et financiers Autres délits departement year month
date
2020-05-01 0 0 1 0 0 0 135 0 0 2 ... 3 0 0 2 0 0 96 01 2020 05
2020-04-01 0 0 0 0 3 0 131 0 0 1 ... 0 0 1 1 0 0 52 01 2020 04
2020-03-01 0 0 0 0 0 1 107 0 0 2 ... 0 0 0 3 0 3 46 01 2020 03
2020-02-01 0 0 0 0 0 1 123 1 0 2 ... 0 0 1 5 1 2 83 01 2020 02
2020-01-01 0 0 0 0 0 0 134 0 0 1 ... 0 0 0 4 0 1 80 01 2020 01

5 rows × 110 columns

Le champ date est maintenant l'index. Voyons maintenant les types de données.

1.6. Fixation des types de données / Fixing a data type

Regardons si plusieurs colonnes ne possèderaient pas un typage non conventionnel ou potentiellement inapproprié pour notre analyse.

In [8]:
df.dtypes.values
Out[8]:
array([dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'),
       dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'),
       dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'),
       dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'),
       dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'),
       dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'),
       dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'),
       dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'),
       dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'),
       dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'),
       dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'),
       dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'),
       dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'),
       dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'),
       dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'),
       dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'),
       dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'),
       dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'),
       dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'),
       dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'),
       dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'),
       dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'),
       dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'),
       dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'),
       dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'),
       dtype('int64'), dtype('int64'), dtype('int64'), dtype('int64'),
       dtype('int64'), dtype('int64'), dtype('int64'), dtype('O'),
       dtype('O')], dtype=object)
In [9]:
df.dtypes
Out[9]:
libellé index
Règlements de compte entre malfaireurs                        int64
Homicides pour voler et à l'occasion de vols                  int64
Homicides pour d'autres motifs                                int64
Tentatives d'homicides pour voler et à l'occasion de vols     int64
Tentatives homicides pour d'autres motifs                     int64
                                                              ...  
Fraudes fiscales                                              int64
Autres délits économiques et financiers                       int64
Autres délits                                                 int64
year                                                         object
month                                                        object
Length: 109, dtype: object

Fixons les types des champs 'year' et 'month'

In [10]:
df.year = df.year.astype(str).astype(int)
df.month = df.month.astype(str)

En regardant de plus près, nous pouvons constater que plusieurs colonnes se nomment 'index non utilisé', penchons-nous dessus.

1.7. Colonnes inutilisées

In [11]:
# Define names of index and columns
df.index.names = ['index']
df.columns.names = ['libellé columns']

df['Index non utilisé'].sum()
Out[11]:
libellé columns
Index non utilisé    0
Index non utilisé    2
Index non utilisé    0
Index non utilisé    0
dtype: int64

En visualisant ces résultats, nous pouvons constater que ces dimensions nommées 'Index non utilisé' ne représentent pas une grande quantité d'information. Aussi nous n'allons pas en tenir compte.

In [12]:
print(df.shape)
df_all = df_all.drop(columns='Index non utilisé')
df = df.drop(columns='Index non utilisé')
print(df.shape)
(293, 109)
(293, 105)

Les manipulations de bases ont été réalisées, nous pouvons donc démarrer notre analyse.

2. Analyse du jeu de données / data analyse

Intéressons-nous au jeu de données du point de vue macro.

In [13]:
# Examine the shape of the DataFrame
print(df.shape)

# Count the number of missing values in each column
print(df.isnull().sum().values)
(293, 105)
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

Le jeu de donnée est composé de 289 observations pour 105 dimensions. Aucune valeur null ou manquante n’est répertoriée. C'est bien, nous n'allons pas avoir besoin d'effectuer une manipulation de traitements les concernant.

Le jeu de donnée dispose de libellés très explicites. Les voici :

In [14]:
print(df.columns.values)
['Règlements de compte entre malfaireurs'
 "Homicides pour voler et à l'occasion de vols"
 "Homicides pour d'autres motifs"
 "Tentatives d'homicides pour voler et à l'occasion de vols"
 "Tentatives homicides pour d'autres motifs"
 'Coups et blessures volontaires suivis de mort'
 'Autres coups et blessures volontaires criminels ou correctionnels'
 "Prises d'otages à l'occasion de vols"
 "Prises d'otages dans un autre but" 'Sequestrations'
 'Menaces ou chantages pour extorsion de fonds'
 'Menaces ou chantages dans un autre but'
 'Atteintes à la dignité et à la personnalité' 'Violations de domicile'
 'Vols à main armée contre des établissements financiers'
 'Vols à main armée contre des éts industriels ou commerciaux'
 'Vols à main armée contre des entreprises de transports de fonds'
 'Vols à main armée contre des particuliers à leur domicile'
 'Autres vols à main armée'
 'Vols avec armes blanches contre des établissements financiers,commerciaux ou industriels'
 'Vols avec armes blanches contre des particuliers à leur domicile'
 'Autres vols avec armes blanches'
 'Vols violents sans arme contre des établissements financiers,commerciaux ou industriels'
 'Vols violents sans arme contre des particuliers à leur domicile'
 'Vols violents sans arme contre des femmes sur voie publique ou autre lieu public'
 "Vols violents sans arme contre d'autres victimes"
 "Cambriolages de locaux d'habitations principales"
 'Cambriolages de résidences secondaires'
 'Cambriolages de locaux industriels, commerciaux ou financiers'
 "Cambriolages d'autres lieux" 'Vols avec entrée par ruse en tous lieux'
 'Vols à la tire' "Vols à l'étalage"
 'Vols de véhicules de transport avec frêt' "Vols d'automobiles"
 'Vols de véhicules motorisés à 2 roues' 'Vols à la roulotte'
 "Vols d'accessoires sur véhicules à moteur immatriculés"
 'Vols simples sur chantier' 'Vols simples sur exploitations agricoles'
 'Autres vols simples contre des établissements publics ou privés'
 'Autres vols simples contre des particuliers dans deslocaux privés'
 'Autres vols simples contre des particuliers dans des locaux ou lieux publics'
 'Recels' 'Proxénétisme' 'Viols sur des majeur(e)s'
 'Viols sur des mineur(e)s'
 'Harcèlements sexuels et autres agressions sexuelles contre des majeur(e)s'
 'Harcèlements sexuels et autres agressions sexuelles contre des mineur(e)s'
 'Atteintes sexuelles'
 'Homicides commis contre enfants de moins de 15 ans'
 "Violences, mauvais traitements et abandons d'enfants."
 'Délits au sujet de la garde des mineurs'
 'Non versement de pension alimentaire'
 'Trafic et revente sans usage de stupéfiants'
 'Usage-revente de stupéfiants' 'Usage de stupéfiants'
 'Autres infractions à la législation sur les stupéfiants'
 "Délits de débits de boissons et infraction à la règlementation sur l'alcool et le tabac"
 "Fraudes alimentaires et infractions à l'hygiène"
 'Autres délits contre santé publique et la réglementation des professions médicales'
 'Incendies volontaires de biens publics'
 'Incendies volontaires de biens privés'
 "Attentats à l'explosif contre des biens publics"
 "Attentats à l'explosif contre des biens privés"
 'Autres destructions er dégradations de biens publics'
 'Autres destructions er dégradations de biens privés'
 'Destructions et dégradations de véhicules privés'
 "Infractions aux conditions générales d'entrée et de séjour des étrangers"
 "Aide à l'entrée, à la circulation et au séjour des étrangers"
 'Autres infractions à la police des étrangers'
 'Outrages à dépositaires autorité' 'Violences à dépositaires autorité'
 'Port ou détention armes prohibées'
 'Atteintes aux intérêts fondamentaux de la Nation'
 'Délits des courses et des jeux'
 'Délits interdiction de séjour et de paraître'
 'Destructions, cruautés et autres délits envers les animaux'
 "Atteintes à l'environnement" 'Chasse et pêche'
 "Faux documents d'identité"
 'Faux documents concernant la circulation des véhicules'
 'Autres faux documents administratifs'
 'Faux en écriture publique et authentique' 'Autres faux en écriture'
 'Fausse monnaie' 'Contrefaçons et fraudes industrielles et commerciales'
 'Contrefaçons littéraires et artistique'
 'Falsification et usages de chèques volés'
 'Falsification et usages de cartes de crédit'
 'Escroqueries et abus de confiance'
 'Infractions à la législation sur les chèques' 'Travail clandestin'
 "Emploi d'étranger sans titre de travail"
 "Marchandage - prêt de main d'oeuvre"
 'Banqueroutes, abus de biens sociaux et autres délits de société'
 'Prix illicittes, publicité fausse et infractions aux règles de la concurrence'
 'Achats et ventes sans factures'
 "Infractions à l'exercice d'une profession règlementée"
 "Infractions au droit de l'urbanisme et de la construction"
 'Fraudes fiscales' 'Autres délits économiques et financiers'
 'Autres délits' 'year' 'month']

Ces informations nous permettent de comprendre que ce jeu de donnée regroupe principalement des incidents (crimes ou délits) agrégés par mois d'activité. Aussi pour améliorer notre étude, nous renforçons-le en ajoutant des données concernant la population française.

2.1. France Métropolitaine

Le jeu de donnée population_xl_data est une estimation de la population française diversifiée par les départements, les années ainsi que le sexe des individus. Il va nous permettre par croisement d'apporter des indications complémentaires sur les actes criminels en France.

2.1.1. Description élémentaire

In [15]:
# Chargement de XL en Dataframe
df_population = pd.read_excel(population_xl_data, '2020', header = 4, index='Départements')
# Nettoyage du jeu de données
df_population.rename(columns={'Unnamed: 0':'Departement','Total.1':'Total Homme','Total.2':'Total Femme'}, inplace=True)

# Suppresion des lignes indésirables
df_population = df_population.drop([96, 102, 103, 104, 105])

valid_population_columns = ['Departement', 'Total','Total Homme','Total Femme']

# Finition sur le DataFrame
df_population = df_population[valid_population_columns]
df_population.head()
Out[15]:
Departement Total Total Homme Total Femme
0 01 656955.0 323345.0 333610.0
1 02 526050.0 256977.0 269073.0
2 03 331315.0 158212.0 173103.0
3 04 165197.0 80612.0 84585.0
4 05 141756.0 69231.0 72525.0
In [16]:
total_population_france_metropolitaine = df_population.loc[:96,'Total'].sum()
total_population_dom = df_population.loc[96:,'Total'].sum()
total_population_france_metropolitaine_dom = df_population.loc[:,'Total'].sum()

# En 2020
print("La population de la France métropolitaine est estimée à " + str(int(total_population_france_metropolitaine)) + " individus.")
print("La population des DOMs est estimée à " + str(int(total_population_dom)) + " individus.")
print("La population de la France métropolitaine et des DOMs est estimée à " + str(int(total_population_france_metropolitaine_dom)) + " individus.")
La population de la France métropolitaine est estimée à 64897954 individus.
La population des DOMs est estimée à 2165749 individus.
La population de la France métropolitaine et des DOMs est estimée à 67063703 individus.
In [17]:
df_population['% Population Métropolitaine'] = round(df_population.Total / total_population_france_metropolitaine_dom * 100, 2)

print("Vérification % data : " + str(round(df_population['% Population Métropolitaine'].sum(), 2)))
df_population.head()
Vérification % data : 99.99
Out[17]:
Departement Total Total Homme Total Femme % Population Métropolitaine
0 01 656955.0 323345.0 333610.0 0.98
1 02 526050.0 256977.0 269073.0 0.78
2 03 331315.0 158212.0 173103.0 0.49
3 04 165197.0 80612.0 84585.0 0.25
4 05 141756.0 69231.0 72525.0 0.21

Nous disposons maintenant d'un second dataframe nous permettant de connaitre la part de la population pour chaque département. Reprenons l'analyse de notre jeu de donnée initial.

In [18]:
round(df.describe(), 2)
Out[18]:
libellé columns Règlements de compte entre malfaireurs Homicides pour voler et à l'occasion de vols Homicides pour d'autres motifs Tentatives d'homicides pour voler et à l'occasion de vols Tentatives homicides pour d'autres motifs Coups et blessures volontaires suivis de mort Autres coups et blessures volontaires criminels ou correctionnels Prises d'otages à l'occasion de vols Prises d'otages dans un autre but Sequestrations ... Marchandage - prêt de main d'oeuvre Banqueroutes, abus de biens sociaux et autres délits de société Prix illicittes, publicité fausse et infractions aux règles de la concurrence Achats et ventes sans factures Infractions à l'exercice d'une profession règlementée Infractions au droit de l'urbanisme et de la construction Fraudes fiscales Autres délits économiques et financiers Autres délits year
count 293.00 293.00 293.00 293.00 293.00 293.00 293.00 293.00 293.00 293.00 ... 293.00 293.00 293.00 293.00 293.00 293.00 293.00 293.00 293.00 293.00
mean 6.57 3.68 57.30 6.96 110.59 14.52 13754.66 3.75 3.49 196.22 ... 20.72 148.89 71.21 31.73 95.74 248.26 57.54 423.09 7906.27 2007.71
std 3.70 3.00 15.71 4.34 45.28 6.23 4492.70 2.86 3.34 79.80 ... 12.66 45.98 77.33 17.26 34.29 94.24 18.31 312.54 2112.42 7.06
min 0.00 0.00 29.00 0.00 50.00 3.00 4989.00 0.00 0.00 73.00 ... 1.00 42.00 8.00 1.00 27.00 102.00 20.00 100.00 3048.00 1996.00
25% 4.00 2.00 47.00 4.00 82.00 10.00 9909.00 2.00 1.00 147.00 ... 12.00 120.00 42.00 21.00 72.00 174.00 44.00 192.00 7266.00 2002.00
50% 6.00 3.00 55.00 6.00 93.00 14.00 14823.00 3.00 2.00 172.00 ... 18.00 141.00 58.00 30.00 94.00 219.00 57.00 248.00 7915.00 2008.00
75% 9.00 5.00 65.00 9.00 124.00 18.00 16875.00 5.00 5.00 223.00 ... 26.00 162.00 73.00 39.00 114.00 321.00 67.00 706.00 9026.00 2014.00
max 22.00 16.00 170.00 26.00 264.00 42.00 24222.00 19.00 19.00 392.00 ... 104.00 439.00 1017.00 143.00 221.00 732.00 142.00 1465.00 13659.00 2020.00

8 rows × 104 columns

2.1.2. Relation et corrélation

L'analyse des corrélations d'un jeu de donnée est toujours intéressante. Elle permet généralement de distinguer assez facilement quelles sont les variables pour lesquelles, il existe des corrélations positives ou négatives. Toutefois, il est toujours bon de rappeler que corrélation ne signifie pas causalité.

In [19]:
corr = df.corr()
corr.style.background_gradient(cmap='coolwarm').set_precision(2)
Out[19]:
libellé columns Règlements de compte entre malfaireurs Homicides pour voler et à l'occasion de vols Homicides pour d'autres motifs Tentatives d'homicides pour voler et à l'occasion de vols Tentatives homicides pour d'autres motifs Coups et blessures volontaires suivis de mort Autres coups et blessures volontaires criminels ou correctionnels Prises d'otages à l'occasion de vols Prises d'otages dans un autre but Sequestrations Menaces ou chantages pour extorsion de fonds Menaces ou chantages dans un autre but Atteintes à la dignité et à la personnalité Violations de domicile Vols à main armée contre des établissements financiers Vols à main armée contre des éts industriels ou commerciaux Vols à main armée contre des entreprises de transports de fonds Vols à main armée contre des particuliers à leur domicile Autres vols à main armée Vols avec armes blanches contre des établissements financiers,commerciaux ou industriels Vols avec armes blanches contre des particuliers à leur domicile Autres vols avec armes blanches Vols violents sans arme contre des établissements financiers,commerciaux ou industriels Vols violents sans arme contre des particuliers à leur domicile Vols violents sans arme contre des femmes sur voie publique ou autre lieu public Vols violents sans arme contre d'autres victimes Cambriolages de locaux d'habitations principales Cambriolages de résidences secondaires Cambriolages de locaux industriels, commerciaux ou financiers Cambriolages d'autres lieux Vols avec entrée par ruse en tous lieux Vols à la tire Vols à l'étalage Vols de véhicules de transport avec frêt Vols d'automobiles Vols de véhicules motorisés à 2 roues Vols à la roulotte Vols d'accessoires sur véhicules à moteur immatriculés Vols simples sur chantier Vols simples sur exploitations agricoles Autres vols simples contre des établissements publics ou privés Autres vols simples contre des particuliers dans deslocaux privés Autres vols simples contre des particuliers dans des locaux ou lieux publics Recels Proxénétisme Viols sur des majeur(e)s Viols sur des mineur(e)s Harcèlements sexuels et autres agressions sexuelles contre des majeur(e)s Harcèlements sexuels et autres agressions sexuelles contre des mineur(e)s Atteintes sexuelles Homicides commis contre enfants de moins de 15 ans Violences, mauvais traitements et abandons d'enfants. Délits au sujet de la garde des mineurs Non versement de pension alimentaire Trafic et revente sans usage de stupéfiants Usage-revente de stupéfiants Usage de stupéfiants Autres infractions à la législation sur les stupéfiants Délits de débits de boissons et infraction à la règlementation sur l'alcool et le tabac Fraudes alimentaires et infractions à l'hygiène Autres délits contre santé publique et la réglementation des professions médicales Incendies volontaires de biens publics Incendies volontaires de biens privés Attentats à l'explosif contre des biens publics Attentats à l'explosif contre des biens privés Autres destructions er dégradations de biens publics Autres destructions er dégradations de biens privés Destructions et dégradations de véhicules privés Infractions aux conditions générales d'entrée et de séjour des étrangers Aide à l'entrée, à la circulation et au séjour des étrangers Autres infractions à la police des étrangers Outrages à dépositaires autorité Violences à dépositaires autorité Port ou détention armes prohibées Atteintes aux intérêts fondamentaux de la Nation Délits des courses et des jeux Délits interdiction de séjour et de paraître Destructions, cruautés et autres délits envers les animaux Atteintes à l'environnement Chasse et pêche Faux documents d'identité Faux documents concernant la circulation des véhicules Autres faux documents administratifs Faux en écriture publique et authentique Autres faux en écriture Fausse monnaie Contrefaçons et fraudes industrielles et commerciales Contrefaçons littéraires et artistique Falsification et usages de chèques volés Falsification et usages de cartes de crédit Escroqueries et abus de confiance Infractions à la législation sur les chèques Travail clandestin Emploi d'étranger sans titre de travail Marchandage - prêt de main d'oeuvre Banqueroutes, abus de biens sociaux et autres délits de société Prix illicittes, publicité fausse et infractions aux règles de la concurrence Achats et ventes sans factures Infractions à l'exercice d'une profession règlementée Infractions au droit de l'urbanisme et de la construction Fraudes fiscales Autres délits économiques et financiers Autres délits year
libellé columns
Règlements de compte entre malfaireurs 1.00 -0.02 0.16 0.08 0.04 0.21 -0.00 0.17 -0.02 0.07 0.05 0.03 0.03 0.10 0.13 0.00 -0.11 -0.08 0.08 -0.04 0.08 0.12 0.14 0.09 0.04 0.15 -0.03 0.17 0.22 0.06 0.16 0.16 -0.07 -0.01 0.05 0.09 0.10 0.15 0.02 -0.07 0.27 0.12 0.12 0.10 0.09 0.07 0.14 0.09 0.12 0.11 0.09 0.02 0.10 0.05 -0.09 0.00 -0.07 0.28 -0.10 -0.09 -0.06 0.14 0.04 0.11 0.24 0.25 0.24 0.13 0.02 -0.13 0.06 0.21 0.02 -0.10 -0.18 -0.13 0.07 0.08 -0.19 0.05 0.31 -0.07 0.03 -0.01 -0.17 0.24 -0.01 0.08 0.15 0.17 0.05 -0.01 -0.21 -0.08 -0.04 -0.07 0.04 0.04 0.06 -0.13 0.00 -0.09 0.18 -0.04
Homicides pour voler et à l'occasion de vols -0.02 1.00 0.35 0.46 -0.33 0.51 -0.63 0.12 -0.08 -0.51 -0.50 -0.62 -0.55 -0.40 0.61 0.35 0.30 0.08 0.57 0.44 0.46 0.46 0.44 0.09 -0.29 -0.41 -0.06 0.41 0.49 0.56 0.58 -0.39 -0.14 0.46 0.65 0.47 0.59 0.50 -0.13 -0.16 -0.04 -0.07 -0.53 -0.19 0.05 -0.45 -0.37 -0.38 -0.33 -0.23 0.15 -0.48 -0.54 -0.06 -0.10 -0.42 -0.61 -0.10 -0.13 0.49 -0.07 -0.22 -0.20 0.48 0.50 -0.14 0.34 0.54 0.04 -0.41 0.61 -0.45 -0.61 -0.58 0.59 0.32 -0.37 -0.32 0.19 0.31 0.00 -0.24 -0.57 0.20 -0.16 0.12 0.27 0.17 0.57 -0.52 -0.59 0.62 -0.01 -0.54 0.20 0.53 0.34 0.49 -0.33 0.09 -0.03 -0.44 -0.60 -0.64
Homicides pour d'autres motifs 0.16 0.35 1.00 0.31 -0.04 0.38 -0.36 0.14 0.03 -0.18 -0.17 -0.30 -0.30 -0.09 0.50 0.17 0.16 0.04 0.41 0.17 0.31 0.41 0.39 0.25 -0.18 -0.09 -0.03 0.46 0.52 0.43 0.53 -0.01 -0.16 0.37 0.46 0.40 0.50 0.43 -0.13 -0.12 0.15 0.14 -0.17 0.02 0.06 -0.16 -0.08 -0.10 -0.03 -0.12 0.19 -0.25 -0.27 -0.17 -0.05 -0.21 -0.44 0.09 -0.06 0.26 -0.04 -0.08 -0.15 0.35 0.37 0.10 0.40 0.41 -0.05 -0.44 0.25 -0.13 -0.35 -0.41 0.18 0.06 -0.10 -0.04 0.02 0.14 0.23 -0.26 -0.35 0.00 -0.12 0.21 0.18 0.21 0.49 -0.12 -0.31 0.41 -0.15 -0.41 0.07 0.24 0.23 0.29 -0.22 0.04 -0.06 -0.28 -0.18 -0.41
Tentatives d'homicides pour voler et à l'occasion de vols 0.08 0.46 0.31 1.00 -0.04 0.42 -0.40 0.25 0.17 -0.22 -0.22 -0.34 -0.26 -0.12 0.48 0.18 0.19 0.13 0.42 0.29 0.35 0.29 0.42 0.27 -0.27 -0.37 0.15 0.46 0.42 0.45 0.47 -0.03 -0.06 0.36 0.51 0.27 0.47 0.35 -0.16 -0.02 -0.05 -0.01 -0.32 0.02 0.04 -0.16 -0.07 -0.07 -0.00 -0.32 0.23 -0.17 -0.31 -0.11 0.08 -0.18 -0.38 -0.24 0.12 0.41 -0.08 -0.18 -0.23 0.37 0.37 -0.17 0.20 0.31 -0.21 -0.34 0.40 -0.44 -0.41 -0.38 0.50 0.18 -0.09 -0.00 0.21 0.26 0.04 -0.12 -0.32 0.04 0.04 0.21 0.24 0.19 0.53 -0.28 -0.36 0.51 0.08 -0.35 0.09 0.42 0.36 0.34 -0.20 0.30 -0.07 -0.12 -0.30 -0.39
Tentatives homicides pour d'autres motifs 0.04 -0.33 -0.04 -0.04 1.00 -0.19 0.69 0.44 0.55 0.83 0.71 0.77 0.81 0.88 -0.51 -0.67 -0.35 -0.17 -0.51 -0.54 -0.35 -0.61 -0.23 0.29 -0.20 -0.04 0.41 0.01 -0.37 -0.38 -0.41 0.76 -0.12 -0.36 -0.47 -0.58 -0.43 -0.60 -0.21 0.19 -0.36 0.07 0.40 0.28 -0.06 0.88 0.83 0.89 0.82 0.05 -0.05 0.86 0.56 -0.35 0.54 0.61 0.54 -0.45 0.67 -0.37 0.20 0.30 0.03 -0.27 -0.24 -0.18 -0.51 -0.68 -0.66 0.27 -0.51 0.06 0.66 0.50 -0.09 -0.22 0.88 0.81 0.07 -0.04 -0.24 0.33 0.52 -0.52 0.44 0.19 0.04 -0.07 -0.31 0.48 0.57 -0.51 0.11 0.33 -0.43 -0.24 0.02 -0.51 0.49 0.51 -0.13 0.78 0.70 0.72
Coups et blessures volontaires suivis de mort 0.21 0.51 0.38 0.42 -0.19 1.00 -0.46 0.16 -0.02 -0.32 -0.36 -0.43 -0.35 -0.14 0.51 0.17 0.15 0.01 0.43 0.21 0.26 0.32 0.37 0.19 -0.32 -0.30 -0.05 0.40 0.48 0.47 0.58 -0.19 -0.22 0.26 0.51 0.44 0.54 0.43 -0.10 -0.09 0.06 0.16 -0.31 -0.05 0.12 -0.26 -0.18 -0.16 -0.18 -0.05 0.17 -0.33 -0.33 -0.01 -0.10 -0.29 -0.50 0.10 -0.03 0.36 -0.13 -0.12 -0.15 0.46 0.48 0.01 0.33 0.45 0.05 -0.31 0.59 -0.26 -0.46 -0.50 0.45 0.12 -0.17 -0.08 0.18 0.37 0.11 -0.15 -0.44 0.22 -0.21 0.21 0.28 0.14 0.54 -0.29 -0.40 0.50 -0.02 -0.42 0.17 0.42 0.36 0.45 -0.17 0.11 -0.01 -0.34 -0.37 -0.51
Autres coups et blessures volontaires criminels ou correctionnels -0.00 -0.63 -0.36 -0.40 0.69 -0.46 1.00 0.08 0.21 0.82 0.78 0.97 0.93 0.78 -0.88 -0.60 -0.41 -0.17 -0.82 -0.61 -0.60 -0.79 -0.59 -0.06 0.24 0.38 0.26 -0.51 -0.71 -0.78 -0.78 0.61 0.17 -0.74 -0.90 -0.69 -0.83 -0.81 0.24 0.29 -0.09 0.16 0.67 0.38 0.01 0.83 0.73 0.78 0.61 0.42 -0.25 0.84 0.79 0.04 0.28 0.77 0.90 -0.05 0.45 -0.63 0.13 0.43 0.33 -0.59 -0.54 0.09 -0.64 -0.85 -0.20 0.72 -0.65 0.54 0.95 0.87 -0.52 -0.37 0.70 0.61 -0.05 -0.18 -0.19 0.59 0.83 -0.18 0.36 -0.04 -0.15 -0.24 -0.74 0.69 0.91 -0.79 0.24 0.78 -0.22 -0.44 -0.27 -0.64 0.65 0.17 0.13 0.76 0.87 0.95
Prises d'otages à l'occasion de vols 0.17 0.12 0.14 0.25 0.44 0.16 0.08 1.00 0.48 0.28 0.29 0.17 0.26 0.37 0.10 -0.18 -0.11 -0.05 0.03 -0.05 0.09 -0.05 0.15 0.32 -0.29 -0.23 0.24 0.27 0.15 0.05 0.08 0.33 -0.09 0.05 0.09 -0.17 0.06 -0.07 -0.25 -0.10 -0.24 -0.11 -0.07 0.12 0.08 0.38 0.47 0.42 0.48 -0.11 0.16 0.34 0.16 -0.24 0.34 0.22 -0.03 -0.29 0.35 0.01 0.08 0.04 -0.17 0.18 0.19 -0.16 -0.04 -0.09 -0.40 -0.09 0.08 -0.13 0.11 0.03 0.21 0.04 0.40 0.31 -0.01 0.14 -0.02 0.00 0.03 -0.22 0.21 0.24 0.16 0.14 0.19 0.12 0.06 0.04 -0.04 -0.12 -0.23 0.11 0.21 -0.04 0.17 0.35 -0.07 0.23 0.20 0.10
Prises d'otages dans un autre but -0.02 -0.08 0.03 0.17 0.55 -0.02 0.21 0.48 1.00 0.36 0.35 0.28 0.39 0.50 -0.09 -0.34 -0.20 -0.18 -0.10 -0.19 -0.04 -0.22 -0.01 0.22 -0.44 -0.30 0.21 0.20 -0.04 -0.06 -0.03 0.47 -0.15 0.12 -0.02 -0.25 -0.00 -0.24 -0.32 -0.12 -0.41 -0.14 -0.01 0.14 0.10 0.56 0.56 0.54 0.60 -0.08 0.03 0.48 0.13 -0.44 0.65 0.34 0.06 -0.47 0.51 -0.00 0.05 0.08 -0.16 0.03 0.06 -0.25 -0.16 -0.23 -0.50 -0.02 -0.12 -0.21 0.20 0.11 0.22 0.04 0.60 0.43 0.14 0.06 -0.12 -0.05 0.05 -0.43 0.46 0.10 0.19 0.07 0.02 0.19 0.16 -0.12 0.02 -0.03 -0.33 0.05 0.11 -0.17 0.20 0.49 -0.18 0.41 0.24 0.23
Sequestrations 0.07 -0.51 -0.18 -0.22 0.83 -0.32 0.82 0.28 0.36 1.00 0.86 0.90 0.92 0.87 -0.67 -0.64 -0.38 -0.08 -0.62 -0.57 -0.44 -0.69 -0.27 0.26 0.03 0.18 0.44 -0.17 -0.48 -0.51 -0.57 0.79 0.11 -0.54 -0.66 -0.71 -0.61 -0.69 -0.07 0.18 -0.20 0.09 0.57 0.41 -0.05 0.86 0.82 0.88 0.81 0.15 -0.10 0.93 0.73 -0.11 0.45 0.77 0.76 -0.28 0.62 -0.52 0.10 0.34 0.13 -0.42 -0.37 -0.06 -0.55 -0.79 -0.55 0.46 -0.62 0.22 0.79 0.71 -0.31 -0.31 0.83 0.76 -0.10 -0.08 -0.14 0.49 0.75 -0.46 0.42 0.20 -0.06 -0.11 -0.45 0.72 0.74 -0.68 0.18 0.53 -0.39 -0.33 -0.10 -0.58 0.69 0.42 -0.03 0.79 0.86 0.85
Menaces ou chantages pour extorsion de fonds 0.05 -0.50 -0.17 -0.22 0.71 -0.36 0.78 0.29 0.35 0.86 1.00 0.84 0.85 0.71 -0.58 -0.43 -0.28 0.01 -0.50 -0.41 -0.29 -0.47 -0.21 0.23 0.18 0.35 0.32 -0.21 -0.34 -0.47 -0.53 0.70 0.31 -0.45 -0.58 -0.63 -0.57 -0.55 0.11 0.02 -0.09 -0.05 0.50 0.51 0.05 0.78 0.82 0.75 0.78 0.20 -0.09 0.84 0.70 0.05 0.44 0.82 0.70 -0.15 0.50 -0.46 0.04 0.40 0.24 -0.38 -0.29 0.08 -0.36 -0.61 -0.35 0.50 -0.51 0.37 0.75 0.75 -0.38 -0.27 0.74 0.56 -0.24 -0.12 0.05 0.46 0.75 -0.28 0.43 0.14 -0.06 -0.02 -0.39 0.78 0.75 -0.59 0.20 0.57 -0.26 -0.22 -0.12 -0.53 0.66 0.31 0.14 0.66 0.84 0.76
Menaces ou chantages dans un autre but 0.03 -0.62 -0.30 -0.34 0.77 -0.43 0.97 0.17 0.28 0.90 0.84 1.00 0.96 0.85 -0.84 -0.66 -0.43 -0.16 -0.80 -0.63 -0.56 -0.78 -0.51 0.05 0.20 0.33 0.34 -0.41 -0.66 -0.72 -0.74 0.71 0.15 -0.69 -0.86 -0.74 -0.79 -0.80 0.12 0.28 -0.12 0.13 0.68 0.42 0.01 0.88 0.80 0.84 0.72 0.35 -0.21 0.90 0.82 0.02 0.36 0.79 0.89 -0.12 0.52 -0.63 0.12 0.41 0.26 -0.55 -0.50 0.03 -0.62 -0.86 -0.36 0.64 -0.67 0.45 0.93 0.85 -0.47 -0.36 0.78 0.69 -0.10 -0.14 -0.17 0.58 0.84 -0.29 0.41 0.05 -0.15 -0.20 -0.67 0.72 0.86 -0.79 0.21 0.69 -0.31 -0.44 -0.23 -0.65 0.67 0.26 0.07 0.82 0.92 0.96
Atteintes à la dignité et à la personnalité 0.03 -0.55 -0.30 -0.26 0.81 -0.35 0.93 0.26 0.39 0.92 0.85 0.96 1.00 0.88 -0.80 -0.68 -0.42 -0.18 -0.76 -0.63 -0.54 -0.81 -0.46 0.10 0.01 0.16 0.33 -0.34 -0.63 -0.67 -0.69 0.72 0.11 -0.65 -0.79 -0.75 -0.74 -0.81 0.07 0.21 -0.26 0.06 0.56 0.43 0.01 0.92 0.85 0.90 0.78 0.29 -0.18 0.96 0.77 -0.08 0.48 0.84 0.84 -0.23 0.63 -0.56 0.12 0.37 0.18 -0.48 -0.46 -0.05 -0.65 -0.86 -0.42 0.65 -0.59 0.33 0.89 0.81 -0.32 -0.32 0.86 0.73 -0.02 -0.09 -0.21 0.56 0.79 -0.33 0.47 0.09 -0.05 -0.17 -0.60 0.71 0.85 -0.74 0.28 0.68 -0.32 -0.32 -0.14 -0.60 0.71 0.39 0.05 0.83 0.87 0.92
Violations de domicile 0.10 -0.40 -0.09 -0.12 0.88 -0.14 0.78 0.37 0.50 0.87 0.71 0.85 0.88 1.00 -0.59 -0.75 -0.42 -0.26 -0.60 -0.65 -0.45 -0.67 -0.32 0.25 -0.16 0.08 0.35 -0.04 -0.40 -0.44 -0.41 0.80 -0.14 -0.47 -0.57 -0.53 -0.46 -0.62 -0.08 0.29 -0.21 0.29 0.56 0.36 -0.03 0.92 0.84 0.94 0.81 0.26 -0.12 0.86 0.65 -0.24 0.50 0.67 0.62 -0.26 0.67 -0.45 0.12 0.37 0.09 -0.29 -0.26 -0.01 -0.48 -0.71 -0.56 0.35 -0.50 0.22 0.74 0.55 -0.21 -0.26 0.88 0.89 0.09 0.01 -0.17 0.38 0.59 -0.45 0.42 0.21 0.05 -0.08 -0.36 0.61 0.67 -0.58 0.12 0.39 -0.42 -0.29 -0.02 -0.48 0.59 0.46 -0.11 0.76 0.79 0.75
Vols à main armée contre des établissements financiers 0.13 0.61 0.50 0.48 -0.51 0.51 -0.88 0.10 -0.09 -0.67 -0.58 -0.84 -0.80 -0.59 1.00 0.64 0.41 0.24 0.90 0.65 0.68 0.86 0.73 0.23 -0.20 -0.26 -0.19 0.68 0.88 0.84 0.88 -0.42 -0.09 0.79 0.95 0.73 0.89 0.87 -0.14 -0.25 0.23 -0.03 -0.57 -0.19 0.09 -0.66 -0.49 -0.59 -0.38 -0.36 0.28 -0.71 -0.67 -0.05 -0.20 -0.60 -0.87 0.05 -0.30 0.64 -0.15 -0.32 -0.28 0.62 0.62 0.07 0.75 0.88 0.14 -0.73 0.63 -0.42 -0.86 -0.80 0.45 0.33 -0.55 -0.42 0.08 0.21 0.37 -0.56 -0.75 0.19 -0.26 0.17 0.26 0.33 0.88 -0.52 -0.74 0.86 -0.20 -0.72 0.25 0.47 0.35 0.64 -0.54 -0.07 -0.07 -0.69 -0.69 -0.91
Vols à main armée contre des éts industriels ou commerciaux 0.00 0.35 0.17 0.18 -0.67 0.17 -0.60 -0.18 -0.34 -0.64 -0.43 -0.66 -0.68 -0.75 0.64 1.00 0.38 0.52 0.74 0.86 0.62 0.71 0.56 0.06 0.31 0.06 -0.10 0.19 0.56 0.43 0.43 -0.58 0.44 0.45 0.56 0.40 0.41 0.59 0.14 -0.30 0.36 -0.25 -0.45 -0.09 0.08 -0.71 -0.57 -0.69 -0.56 -0.28 0.15 -0.69 -0.46 0.28 -0.43 -0.42 -0.50 0.25 -0.51 0.45 -0.21 -0.27 -0.00 0.31 0.34 0.11 0.52 0.65 0.47 -0.28 0.44 -0.13 -0.60 -0.37 0.16 0.23 -0.71 -0.69 -0.06 0.11 0.33 -0.24 -0.44 0.53 -0.29 0.02 0.04 0.18 0.50 -0.38 -0.42 0.64 -0.01 -0.29 0.45 0.34 0.13 0.44 -0.35 -0.32 0.22 -0.63 -0.55 -0.64
Vols à main armée contre des entreprises de transports de fonds -0.11 0.30 0.16 0.19 -0.35 0.15 -0.41 -0.11 -0.20 -0.38 -0.28 -0.43 -0.42 -0.42 0.41 0.38 1.00 0.21 0.38 0.40 0.30 0.38 0.30 0.02 0.03 -0.09 -0.10 0.17 0.31 0.34 0.30 -0.36 0.14 0.36 0.40 0.33 0.32 0.35 0.15 -0.10 0.12 -0.08 -0.28 -0.00 0.13 -0.41 -0.33 -0.40 -0.30 -0.05 0.07 -0.40 -0.34 0.14 -0.13 -0.23 -0.33 0.02 -0.13 0.38 -0.12 -0.17 -0.08 0.24 0.22 -0.04 0.27 0.40 0.24 -0.23 0.30 -0.19 -0.39 -0.28 0.26 0.28 -0.38 -0.33 0.10 0.19 0.09 -0.13 -0.27 0.25 -0.05 -0.07 0.15 0.05 0.33 -0.28 -0.37 0.42 0.13 -0.24 0.33 0.36 0.16 0.41 -0.20 -0.02 0.14 -0.34 -0.38 -0.43
Vols à main armée contre des particuliers à leur domicile -0.08 0.08 0.04 0.13 -0.17 0.01 -0.17 -0.05 -0.18 -0.08 0.01 -0.16 -0.18 -0.26 0.24 0.52 0.21 1.00 0.36 0.49 0.32 0.25 0.43 0.19 0.27 0.06 0.25 0.12 0.20 0.21 0.14 -0.12 0.46 0.16 0.21 0.04 0.09 0.19 0.15 0.01 0.16 -0.15 -0.12 0.14 0.03 -0.28 -0.17 -0.21 -0.14 -0.29 0.06 -0.15 -0.12 0.22 -0.17 0.02 -0.02 -0.09 -0.07 0.16 -0.12 -0.13 -0.01 0.05 0.05 -0.04 0.08 0.13 0.03 -0.03 0.05 -0.15 -0.17 0.02 0.12 0.03 -0.26 -0.22 -0.00 0.07 0.10 0.13 -0.03 0.28 0.04 0.11 0.15 0.18 0.25 -0.03 -0.06 0.32 0.27 0.04 0.23 0.24 0.17 0.19 0.02 0.04 0.17 -0.08 -0.14 -0.15
Autres vols à main armée 0.08 0.57 0.41 0.42 -0.51 0.43 -0.82 0.03 -0.10 -0.62 -0.50 -0.80 -0.76 -0.60 0.90 0.74 0.38 0.36 1.00 0.73 0.73 0.87 0.77 0.27 -0.09 -0.19 -0.10 0.58 0.84 0.77 0.81 -0.41 0.08 0.71 0.91 0.64 0.81 0.83 -0.11 -0.32 0.23 -0.14 -0.58 -0.19 0.07 -0.64 -0.47 -0.57 -0.38 -0.44 0.28 -0.66 -0.62 0.02 -0.24 -0.56 -0.80 0.02 -0.34 0.62 -0.17 -0.31 -0.23 0.57 0.60 0.05 0.70 0.83 0.16 -0.64 0.61 -0.41 -0.81 -0.68 0.43 0.33 -0.55 -0.45 -0.01 0.19 0.40 -0.51 -0.69 0.22 -0.27 0.21 0.18 0.34 0.83 -0.47 -0.65 0.83 -0.19 -0.61 0.27 0.47 0.34 0.58 -0.47 -0.11 -0.01 -0.65 -0.64 -0.84
Vols avec armes blanches contre des établissements financiers,commerciaux ou industriels -0.04 0.44 0.17 0.29 -0.54 0.21 -0.61 -0.05 -0.19 -0.57 -0.41 -0.63 -0.63 -0.65 0.65 0.86 0.40 0.49 0.73 1.00 0.68 0.66 0.61 0.13 0.17 -0.10 0.06 0.28 0.57 0.44 0.45 -0.51 0.43 0.48 0.61 0.33 0.44 0.55 0.05 -0.28 0.21 -0.31 -0.52 -0.10 0.13 -0.60 -0.47 -0.57 -0.45 -0.37 0.13 -0.59 -0.43 0.18 -0.29 -0.38 -0.51 0.03 -0.35 0.48 -0.17 -0.31 -0.10 0.37 0.37 -0.06 0.43 0.59 0.30 -0.33 0.47 -0.29 -0.60 -0.37 0.32 0.27 -0.58 -0.59 0.03 0.21 0.22 -0.21 -0.46 0.44 -0.20 0.09 0.11 0.22 0.55 -0.43 -0.45 0.66 0.01 -0.37 0.41 0.37 0.23 0.48 -0.34 -0.13 0.16 -0.54 -0.54 -0.61
Vols avec armes blanches contre des particuliers à leur domicile 0.08 0.46 0.31 0.35 -0.35 0.26 -0.60 0.09 -0.04 -0.44 -0.29 -0.56 -0.54 -0.45 0.68 0.62 0.30 0.32 0.73 0.68 1.00 0.70 0.62 0.29 0.02 -0.09 0.07 0.49 0.67 0.56 0.60 -0.26 0.23 0.57 0.68 0.42 0.59 0.63 -0.09 -0.28 0.22 -0.15 -0.40 -0.04 0.12 -0.43 -0.26 -0.39 -0.19 -0.31 0.21 -0.46 -0.42 0.07 -0.10 -0.34 -0.56 -0.03 -0.21 0.43 -0.17 -0.21 -0.12 0.42 0.46 0.00 0.56 0.63 0.09 -0.49 0.41 -0.30 -0.60 -0.45 0.31 0.32 -0.41 -0.36 -0.03 0.15 0.34 -0.33 -0.46 0.20 -0.12 0.13 0.20 0.29 0.67 -0.31 -0.47 0.63 -0.13 -0.47 0.19 0.33 0.20 0.43 -0.35 -0.02 0.07 -0.46 -0.42 -0.61
Autres vols avec armes blanches 0.12 0.46 0.41 0.29 -0.61 0.32 -0.79 -0.05 -0.22 -0.69 -0.47 -0.78 -0.81 -0.67 0.86 0.71 0.38 0.25 0.87 0.66 0.70 1.00 0.65 0.13 0.13 0.12 -0.27 0.49 0.86 0.74 0.79 -0.41 0.08 0.69 0.85 0.75 0.80 0.91 0.03 -0.34 0.45 -0.03 -0.40 -0.20 0.10 -0.69 -0.50 -0.67 -0.43 -0.27 0.24 -0.75 -0.58 0.15 -0.35 -0.61 -0.79 0.26 -0.52 0.54 -0.21 -0.19 -0.07 0.49 0.56 0.29 0.87 0.93 0.33 -0.66 0.54 -0.14 -0.77 -0.66 0.14 0.26 -0.65 -0.55 -0.17 0.08 0.55 -0.58 -0.62 0.25 -0.38 0.07 0.07 0.35 0.75 -0.38 -0.63 0.73 -0.34 -0.58 0.29 0.33 0.16 0.52 -0.56 -0.35 0.03 -0.74 -0.57 -0.85
Vols violents sans arme contre des établissements financiers,commerciaux ou industriels 0.14 0.44 0.39 0.42 -0.23 0.37 -0.59 0.15 -0.01 -0.27 -0.21 -0.51 -0.46 -0.32 0.73 0.56 0.30 0.43 0.77 0.61 0.62 0.65 1.00 0.44 -0.04 -0.15 0.14 0.63 0.76 0.69 0.65 -0.09 0.20 0.56 0.73 0.41 0.65 0.65 -0.14 -0.22 0.22 -0.09 -0.38 -0.01 0.04 -0.40 -0.20 -0.30 -0.09 -0.48 0.21 -0.36 -0.36 0.02 -0.13 -0.30 -0.55 -0.11 -0.11 0.46 -0.21 -0.20 -0.19 0.46 0.49 0.03 0.54 0.58 -0.10 -0.53 0.39 -0.40 -0.58 -0.48 0.35 0.24 -0.30 -0.19 -0.02 0.25 0.34 -0.30 -0.41 0.06 -0.13 0.37 0.16 0.36 0.77 -0.22 -0.44 0.63 -0.10 -0.49 0.20 0.40 0.32 0.41 -0.23 0.10 -0.06 -0.39 -0.35 -0.59
Vols violents sans arme contre des particuliers à leur domicile 0.09 0.09 0.25 0.27 0.29 0.19 -0.06 0.32 0.22 0.26 0.23 0.05 0.10 0.25 0.23 0.06 0.02 0.19 0.27 0.13 0.29 0.13 0.44 1.00 -0.13 -0.12 0.37 0.45 0.33 0.33 0.28 0.33 0.11 0.19 0.26 -0.02 0.23 0.13 -0.21 -0.00 -0.02 0.02 0.01 0.26 0.01 0.17 0.29 0.27 0.37 -0.25 0.22 0.19 0.05 -0.12 0.20 0.18 -0.06 -0.30 0.34 0.36 -0.09 -0.00 -0.14 0.19 0.21 -0.09 0.10 0.04 -0.46 -0.24 -0.03 -0.28 -0.06 -0.05 0.23 0.03 0.22 0.31 0.04 0.19 0.12 0.02 0.02 -0.15 0.21 0.33 0.19 0.19 0.40 0.13 -0.02 0.23 0.08 -0.19 -0.11 0.24 0.29 0.09 0.17 0.39 -0.06 0.16 0.13 -0.04
Vols violents sans arme contre des femmes sur voie publique ou autre lieu public 0.04 -0.29 -0.18 -0.27 -0.20 -0.32 0.24 -0.29 -0.44 0.03 0.18 0.20 0.01 -0.16 -0.20 0.31 0.03 0.27 -0.09 0.17 0.02 0.13 -0.04 -0.13 1.00 0.85 0.14 -0.28 -0.05 -0.17 -0.23 0.07 0.61 -0.27 -0.28 -0.02 -0.29 0.05 0.54 0.22 0.68 0.23 0.54 0.25 0.15 -0.15 -0.08 -0.17 -0.13 0.25 -0.10 -0.09 0.30 0.63 -0.46 0.05 0.34 0.44 -0.33 -0.28 -0.25 0.24 0.44 -0.29 -0.16 0.49 0.15 -0.01 0.36 0.24 -0.27 0.54 0.26 0.34 -0.60 -0.16 -0.31 -0.24 -0.32 -0.07 0.26 0.31 0.42 0.36 -0.14 -0.12 -0.31 -0.00 -0.20 0.21 0.26 -0.17 0.01 0.33 0.27 -0.29 -0.28 -0.12 0.09 -0.43 0.35 0.01 0.30 0.19
Vols violents sans arme contre d'autres victimes 0.15 -0.41 -0.09 -0.37 -0.04 -0.30 0.38 -0.23 -0.30 0.18 0.35 0.33 0.16 0.08 -0.26 0.06 -0.09 0.06 -0.19 -0.10 -0.09 0.12 -0.15 -0.12 0.85 1.00 -0.01 -0.26 -0.02 -0.21 -0.18 0.27 0.39 -0.30 -0.34 0.07 -0.24 0.05 0.53 0.14 0.71 0.43 0.70 0.28 0.13 0.07 0.12 0.01 0.06 0.46 -0.10 0.04 0.39 0.51 -0.33 0.15 0.35 0.54 -0.24 -0.37 -0.24 0.44 0.54 -0.33 -0.14 0.69 0.27 0.00 0.36 0.22 -0.34 0.75 0.38 0.38 -0.79 -0.26 -0.11 -0.03 -0.35 -0.21 0.40 0.17 0.45 0.17 -0.14 -0.11 -0.28 0.03 -0.25 0.47 0.42 -0.31 -0.14 0.38 0.12 -0.40 -0.39 -0.23 0.13 -0.45 0.27 0.02 0.49 0.26
Cambriolages de locaux d'habitations principales -0.03 -0.06 -0.03 0.15 0.41 -0.05 0.26 0.24 0.21 0.44 0.32 0.34 0.33 0.35 -0.19 -0.10 -0.10 0.25 -0.10 0.06 0.07 -0.27 0.14 0.37 0.14 -0.01 1.00 0.15 -0.13 -0.09 -0.13 0.52 0.39 -0.14 -0.17 -0.39 -0.17 -0.26 -0.19 0.24 -0.07 0.05 0.28 0.26 0.01 0.35 0.38 0.43 0.44 -0.22 0.00 0.43 0.35 0.00 0.21 0.27 0.35 -0.40 0.38 -0.14 -0.17 0.02 -0.06 -0.11 -0.09 -0.29 -0.32 -0.40 -0.51 0.09 -0.27 -0.27 0.27 0.30 0.13 -0.05 0.29 0.28 0.14 0.19 -0.16 0.36 0.35 -0.15 0.35 0.21 0.04 -0.04 0.02 0.18 0.23 -0.09 0.24 0.08 -0.13 -0.07 0.16 -0.14 0.27 0.48 0.03 0.50 0.33 0.34
Cambriolages de résidences secondaires 0.17 0.41 0.46 0.46 0.01 0.40 -0.51 0.27 0.20 -0.17 -0.21 -0.41 -0.34 -0.04 0.68 0.19 0.17 0.12 0.58 0.28 0.49 0.49 0.63 0.45 -0.28 -0.26 0.15 1.00 0.74 0.79 0.72 0.13 -0.12 0.65 0.70 0.48 0.74 0.64 -0.20 0.12 0.17 0.22 -0.23 0.11 0.07 -0.18 0.01 -0.09 0.15 -0.32 0.27 -0.22 -0.37 -0.24 0.14 -0.24 -0.53 -0.20 0.12 0.39 -0.10 -0.12 -0.29 0.43 0.48 0.12 0.54 0.49 -0.34 -0.65 0.25 -0.36 -0.46 -0.55 0.37 0.20 -0.10 0.14 0.25 0.28 0.26 -0.32 -0.40 -0.14 0.05 0.32 0.33 0.25 0.79 -0.25 -0.44 0.60 -0.07 -0.57 -0.04 0.34 0.37 0.42 -0.26 0.32 -0.15 -0.23 -0.26 -0.50
Cambriolages de locaux industriels, commerciaux ou financiers 0.22 0.49 0.52 0.42 -0.37 0.48 -0.71 0.15 -0.04 -0.48 -0.34 -0.66 -0.63 -0.40 0.88 0.56 0.31 0.20 0.84 0.57 0.67 0.86 0.76 0.33 -0.05 -0.02 -0.13 0.74 1.00 0.82 0.84 -0.19 0.01 0.68 0.85 0.70 0.85 0.88 -0.05 -0.25 0.41 0.10 -0.37 -0.01 0.12 -0.48 -0.28 -0.44 -0.21 -0.25 0.27 -0.57 -0.49 -0.00 -0.18 -0.45 -0.77 0.17 -0.29 0.49 -0.17 -0.11 -0.11 0.58 0.69 0.30 0.85 0.85 0.11 -0.70 0.54 -0.18 -0.69 -0.68 0.25 0.22 -0.42 -0.28 -0.05 0.25 0.52 -0.48 -0.56 0.16 -0.28 0.30 0.24 0.37 0.88 -0.28 -0.56 0.74 -0.26 -0.65 0.22 0.38 0.30 0.54 -0.42 -0.10 -0.00 -0.62 -0.44 -0.78
Cambriolages d'autres lieux 0.06 0.56 0.43 0.45 -0.38 0.47 -0.78 0.05 -0.06 -0.51 -0.47 -0.72 -0.67 -0.44 0.84 0.43 0.34 0.21 0.77 0.44 0.56 0.74 0.69 0.33 -0.17 -0.21 -0.09 0.79 0.82 1.00 0.85 -0.20 -0.09 0.74 0.89 0.76 0.90 0.88 -0.11 0.01 0.27 0.18 -0.38 -0.06 0.06 -0.59 -0.38 -0.48 -0.22 -0.34 0.27 -0.56 -0.64 -0.03 -0.11 -0.51 -0.74 -0.05 -0.17 0.57 -0.21 -0.25 -0.28 0.55 0.59 0.17 0.72 0.78 -0.07 -0.71 0.50 -0.42 -0.74 -0.74 0.46 0.33 -0.48 -0.23 0.12 0.22 0.28 -0.47 -0.60 0.03 -0.13 0.24 0.22 0.28 0.84 -0.46 -0.73 0.75 -0.13 -0.69 0.14 0.48 0.32 0.58 -0.43 0.04 -0.06 -0.51 -0.58 -0.81
Vols avec entrée par ruse en tous lieux 0.16 0.58 0.53 0.47 -0.41 0.58 -0.78 0.08 -0.03 -0.57 -0.53 -0.74 -0.69 -0.41 0.88 0.43 0.30 0.14 0.81 0.45 0.60 0.79 0.65 0.28 -0.23 -0.18 -0.13 0.72 0.84 0.85 1.00 -0.23 -0.17 0.70 0.90 0.79 0.94 0.87 -0.08 -0.16 0.29 0.22 -0.36 -0.14 0.09 -0.53 -0.38 -0.44 -0.27 -0.25 0.28 -0.61 -0.63 -0.04 -0.16 -0.55 -0.80 0.07 -0.20 0.59 -0.24 -0.22 -0.24 0.61 0.59 0.18 0.75 0.83 0.05 -0.70 0.61 -0.37 -0.79 -0.77 0.43 0.29 -0.46 -0.24 0.14 0.26 0.38 -0.52 -0.67 0.14 -0.22 0.20 0.27 0.32 0.85 -0.42 -0.66 0.80 -0.18 -0.66 0.18 0.47 0.38 0.61 -0.47 -0.01 -0.06 -0.57 -0.56 -0.85
Vols à la tire 0.16 -0.39 -0.01 -0.03 0.76 -0.19 0.61 0.33 0.47 0.79 0.70 0.71 0.72 0.80 -0.42 -0.58 -0.36 -0.12 -0.41 -0.51 -0.26 -0.41 -0.09 0.33 0.07 0.27 0.52 0.13 -0.19 -0.20 -0.23 1.00 0.08 -0.29 -0.39 -0.39 -0.25 -0.37 -0.11 0.22 0.02 0.34 0.69 0.39 0.01 0.77 0.80 0.80 0.84 0.11 -0.01 0.76 0.57 -0.15 0.44 0.57 0.51 -0.23 0.55 -0.40 -0.15 0.39 0.11 -0.26 -0.17 0.13 -0.21 -0.51 -0.62 0.17 -0.52 0.16 0.60 0.44 -0.28 -0.24 0.72 0.72 -0.03 -0.06 0.04 0.23 0.59 -0.51 0.42 0.25 -0.02 -0.02 -0.19 0.65 0.55 -0.48 0.02 0.29 -0.40 -0.28 -0.07 -0.46 0.47 0.39 -0.08 0.69 0.76 0.61
Vols à l'étalage -0.07 -0.14 -0.16 -0.06 -0.12 -0.22 0.17 -0.09 -0.15 0.11 0.31 0.15 0.11 -0.14 -0.09 0.44 0.14 0.46 0.08 0.43 0.23 0.08 0.20 0.11 0.61 0.39 0.39 -0.12 0.01 -0.09 -0.17 0.08 1.00 -0.08 -0.12 -0.18 -0.22 0.01 0.42 0.05 0.39 -0.13 0.19 0.48 0.28 -0.07 0.09 -0.04 0.08 -0.01 -0.02 0.09 0.28 0.60 -0.05 0.35 0.37 0.07 0.01 -0.03 -0.33 0.01 0.17 -0.18 -0.12 0.13 0.01 -0.05 0.18 0.36 -0.06 0.19 0.15 0.47 -0.13 0.02 -0.15 -0.22 -0.11 0.16 0.27 0.44 0.40 0.38 0.24 0.04 -0.06 0.07 0.02 0.23 0.28 0.05 0.40 0.38 0.33 0.13 -0.02 0.01 0.25 0.04 0.45 0.10 0.21 0.14
Vols de véhicules de transport avec frêt -0.01 0.46 0.37 0.36 -0.36 0.26 -0.74 0.05 0.12 -0.54 -0.45 -0.69 -0.65 -0.47 0.79 0.45 0.36 0.16 0.71 0.48 0.57 0.69 0.56 0.19 -0.27 -0.30 -0.14 0.65 0.68 0.74 0.70 -0.29 -0.08 1.00 0.82 0.60 0.79 0.68 -0.21 -0.15 0.09 -0.11 -0.50 -0.07 0.07 -0.50 -0.39 -0.49 -0.22 -0.33 0.27 -0.52 -0.61 -0.14 0.21 -0.43 -0.72 -0.16 -0.13 0.59 -0.11 -0.30 -0.29 0.46 0.43 -0.09 0.59 0.70 -0.00 -0.67 0.35 -0.47 -0.72 -0.65 0.47 0.41 -0.41 -0.31 0.14 0.14 0.23 -0.57 -0.64 -0.06 0.13 -0.03 0.33 0.32 0.76 -0.47 -0.68 0.72 -0.04 -0.64 0.12 0.47 0.23 0.52 -0.52 0.14 -0.11 -0.48 -0.63 -0.75
Vols d'automobiles 0.05 0.65 0.46 0.51 -0.47 0.51 -0.90 0.09 -0.02 -0.66 -0.58 -0.86 -0.79 -0.57 0.95 0.56 0.40 0.21 0.91 0.61 0.68 0.85 0.73 0.26 -0.28 -0.34 -0.17 0.70 0.85 0.89 0.90 -0.39 -0.12 0.82 1.00 0.75 0.94 0.88 -0.18 -0.25 0.13 -0.06 -0.62 -0.23 0.04 -0.64 -0.48 -0.56 -0.35 -0.45 0.29 -0.67 -0.74 -0.09 -0.11 -0.61 -0.88 -0.09 -0.25 0.69 -0.16 -0.35 -0.33 0.63 0.63 -0.01 0.71 0.87 0.04 -0.74 0.64 -0.53 -0.88 -0.81 0.57 0.40 -0.52 -0.38 0.12 0.22 0.30 -0.59 -0.77 0.10 -0.20 0.16 0.26 0.34 0.88 -0.57 -0.79 0.87 -0.18 -0.73 0.20 0.54 0.38 0.63 -0.54 0.00 -0.11 -0.64 -0.74 -0.92
Vols de véhicules motorisés à 2 roues 0.09 0.47 0.40 0.27 -0.58 0.44 -0.69 -0.17 -0.25 -0.71 -0.63 -0.74 -0.75 -0.53 0.73 0.40 0.33 0.04 0.64 0.33 0.42 0.75 0.41 -0.02 -0.02 0.07 -0.39 0.48 0.70 0.76 0.79 -0.39 -0.18 0.60 0.75 1.00 0.85 0.87 0.20 0.01 0.49 0.41 -0.24 -0.14 0.11 -0.66 -0.56 -0.63 -0.48 0.05 0.14 -0.75 -0.62 0.13 -0.32 -0.60 -0.73 0.32 -0.38 0.48 -0.25 -0.12 -0.06 0.44 0.51 0.42 0.78 0.87 0.39 -0.57 0.54 -0.06 -0.69 -0.71 0.21 0.28 -0.65 -0.39 0.13 0.09 0.38 -0.52 -0.63 0.26 -0.33 -0.00 0.17 0.22 0.63 -0.44 -0.62 0.68 -0.19 -0.53 0.29 0.36 0.13 0.58 -0.55 -0.27 0.02 -0.71 -0.61 -0.83
Vols à la roulotte 0.10 0.59 0.50 0.47 -0.43 0.54 -0.83 0.06 -0.00 -0.61 -0.57 -0.79 -0.74 -0.46 0.89 0.41 0.32 0.09 0.81 0.44 0.59 0.80 0.65 0.23 -0.29 -0.24 -0.17 0.74 0.85 0.90 0.94 -0.25 -0.22 0.79 0.94 0.85 1.00 0.89 -0.15 -0.15 0.24 0.19 -0.44 -0.18 0.05 -0.56 -0.42 -0.49 -0.28 -0.28 0.28 -0.64 -0.68 -0.11 -0.09 -0.59 -0.86 0.01 -0.20 0.61 -0.22 -0.25 -0.27 0.58 0.62 0.14 0.77 0.86 0.04 -0.76 0.59 -0.42 -0.82 -0.82 0.47 0.34 -0.48 -0.28 0.17 0.17 0.34 -0.62 -0.73 0.04 -0.20 0.17 0.28 0.32 0.85 -0.48 -0.74 0.79 -0.22 -0.72 0.15 0.46 0.31 0.60 -0.55 0.01 -0.13 -0.62 -0.65 -0.89
Vols d'accessoires sur véhicules à moteur immatriculés 0.15 0.50 0.43 0.35 -0.60 0.43 -0.81 -0.07 -0.24 -0.69 -0.55 -0.80 -0.81 -0.62 0.87 0.59 0.35 0.19 0.83 0.55 0.63 0.91 0.65 0.13 0.05 0.05 -0.26 0.64 0.88 0.88 0.87 -0.37 0.01 0.68 0.88 0.87 0.89 1.00 0.09 -0.12 0.50 0.17 -0.36 -0.13 0.14 -0.71 -0.51 -0.66 -0.41 -0.21 0.23 -0.75 -0.63 0.16 -0.35 -0.63 -0.79 0.26 -0.44 0.52 -0.26 -0.20 -0.13 0.53 0.61 0.38 0.90 0.94 0.27 -0.68 0.59 -0.16 -0.78 -0.73 0.22 0.27 -0.67 -0.46 -0.04 0.14 0.52 -0.53 -0.62 0.24 -0.37 0.15 0.10 0.31 0.79 -0.44 -0.69 0.75 -0.28 -0.62 0.28 0.37 0.20 0.59 -0.56 -0.27 0.01 -0.72 -0.59 -0.88
Vols simples sur chantier 0.02 -0.13 -0.13 -0.16 -0.21 -0.10 0.24 -0.25 -0.32 -0.07 0.11 0.12 0.07 -0.08 -0.14 0.14 0.15 0.15 -0.11 0.05 -0.09 0.03 -0.14 -0.21 0.54 0.53 -0.19 -0.20 -0.05 -0.11 -0.08 -0.11 0.42 -0.21 -0.18 0.20 -0.15 0.09 1.00 0.36 0.58 0.32 0.30 0.40 0.27 -0.11 -0.04 -0.12 -0.14 0.45 -0.11 -0.08 0.14 0.58 -0.27 0.22 0.30 0.41 -0.09 -0.09 -0.21 0.18 0.32 -0.20 -0.10 0.54 0.08 0.06 0.53 0.46 0.01 0.54 0.20 0.33 -0.30 -0.06 -0.25 -0.13 0.10 0.08 0.23 0.40 0.30 0.63 0.05 -0.14 0.03 -0.04 -0.12 0.18 0.32 0.05 0.42 0.50 0.46 0.10 -0.08 0.14 0.19 -0.17 0.47 -0.06 0.17 0.07
Vols simples sur exploitations agricoles -0.07 -0.16 -0.12 -0.02 0.19 -0.09 0.29 -0.10 -0.12 0.18 0.02 0.28 0.21 0.29 -0.25 -0.30 -0.10 0.01 -0.32 -0.28 -0.28 -0.34 -0.22 -0.00 0.22 0.14 0.24 0.12 -0.25 0.01 -0.16 0.22 0.05 -0.15 -0.25 0.01 -0.15 -0.12 0.36 1.00 0.25 0.48 0.41 0.29 0.08 0.12 0.11 0.18 0.15 0.21 -0.13 0.18 0.23 0.21 0.00 0.13 0.39 -0.08 0.25 -0.17 -0.03 0.02 -0.04 -0.26 -0.22 0.11 -0.26 -0.31 -0.19 0.18 -0.35 0.09 0.30 0.20 -0.07 -0.02 0.03 0.36 0.37 0.16 -0.16 0.41 0.31 0.06 0.31 -0.02 0.02 -0.15 -0.11 -0.05 0.17 -0.05 0.39 0.22 0.06 -0.14 0.02 0.01 0.15 0.25 0.02 0.39 0.21 0.27
Autres vols simples contre des établissements publics ou privés 0.27 -0.04 0.15 -0.05 -0.36 0.06 -0.09 -0.24 -0.41 -0.20 -0.09 -0.12 -0.26 -0.21 0.23 0.36 0.12 0.16 0.23 0.21 0.22 0.45 0.22 -0.02 0.68 0.71 -0.07 0.17 0.41 0.27 0.29 0.02 0.39 0.09 0.13 0.49 0.24 0.50 0.58 0.25 1.00 0.57 0.43 0.33 0.25 -0.32 -0.19 -0.30 -0.19 0.37 0.05 -0.36 0.05 0.59 -0.45 -0.13 -0.04 0.68 -0.35 -0.02 -0.37 0.18 0.29 0.01 0.15 0.74 0.60 0.42 0.46 -0.09 0.05 0.52 -0.09 -0.05 -0.45 -0.04 -0.47 -0.20 -0.15 0.09 0.63 0.03 0.11 0.40 -0.19 0.05 -0.07 0.14 0.27 0.15 0.04 0.20 -0.05 0.03 0.34 -0.05 -0.11 0.24 -0.11 -0.41 0.30 -0.32 0.10 -0.24
Autres vols simples contre des particuliers dans deslocaux privés 0.12 -0.07 0.14 -0.01 0.07 0.16 0.16 -0.11 -0.14 0.09 -0.05 0.13 0.06 0.29 -0.03 -0.25 -0.08 -0.15 -0.14 -0.31 -0.15 -0.03 -0.09 0.02 0.23 0.43 0.05 0.22 0.10 0.18 0.22 0.34 -0.13 -0.11 -0.06 0.41 0.19 0.17 0.32 0.48 0.57 1.00 0.63 0.23 0.04 0.07 0.04 0.12 0.05 0.50 -0.04 -0.04 0.08 0.14 -0.17 -0.01 0.08 0.34 0.10 -0.14 -0.32 0.31 0.22 -0.05 0.03 0.59 0.24 0.07 0.08 -0.03 -0.08 0.35 0.13 -0.04 -0.25 -0.10 -0.05 0.32 0.24 0.04 0.16 0.07 0.11 0.04 -0.05 0.11 0.05 -0.02 0.04 0.19 0.14 -0.03 -0.02 0.03 -0.01 -0.12 -0.07 0.07 0.07 -0.07 0.05 0.01 0.21 -0.00
Autres vols simples contre des particuliers dans des locaux ou lieux publics 0.12 -0.53 -0.17 -0.32 0.40 -0.31 0.67 -0.07 -0.01 0.57 0.50 0.68 0.56 0.56 -0.57 -0.45 -0.28 -0.12 -0.58 -0.52 -0.40 -0.40 -0.38 0.01 0.54 0.70 0.28 -0.23 -0.37 -0.38 -0.36 0.69 0.19 -0.50 -0.62 -0.24 -0.44 -0.36 0.30 0.41 0.43 0.63 1.00 0.38 0.06 0.48 0.43 0.49 0.41 0.52 -0.15 0.47 0.59 0.27 0.01 0.42 0.65 0.25 0.22 -0.52 -0.24 0.47 0.37 -0.45 -0.37 0.45 -0.16 -0.46 -0.12 0.36 -0.57 0.57 0.66 0.54 -0.63 -0.29 0.33 0.46 -0.10 -0.12 0.07 0.38 0.68 -0.14 0.19 -0.05 -0.19 -0.13 -0.45 0.62 0.59 -0.58 0.03 0.46 -0.20 -0.45 -0.31 -0.40 0.41 -0.07 0.13 0.51 0.74 0.60
Recels 0.10 -0.19 0.02 0.02 0.28 -0.05 0.38 0.12 0.14 0.41 0.51 0.42 0.43 0.36 -0.19 -0.09 -0.00 0.14 -0.19 -0.10 -0.04 -0.20 -0.01 0.26 0.25 0.28 0.26 0.11 -0.01 -0.06 -0.14 0.39 0.48 -0.07 -0.23 -0.14 -0.18 -0.13 0.40 0.29 0.33 0.23 0.38 1.00 0.33 0.31 0.43 0.34 0.43 0.39 0.05 0.38 0.43 0.36 0.33 0.64 0.45 0.11 0.40 -0.09 -0.15 0.20 0.14 -0.11 -0.05 0.23 -0.05 -0.18 -0.06 0.31 -0.19 0.31 0.36 0.43 -0.10 -0.08 0.24 0.29 0.06 0.26 0.20 0.54 0.49 0.21 0.52 0.13 0.25 0.05 0.09 0.45 0.41 -0.02 0.57 0.35 0.13 0.18 0.01 0.08 0.43 0.38 0.39 0.31 0.45 0.29
Proxénétisme 0.09 0.05 0.06 0.04 -0.06 0.12 0.01 0.08 0.10 -0.05 0.05 0.01 0.01 -0.03 0.09 0.08 0.13 0.03 0.07 0.13 0.12 0.10 0.04 0.01 0.15 0.13 0.01 0.07 0.12 0.06 0.09 0.01 0.28 0.07 0.04 0.11 0.05 0.14 0.27 0.08 0.25 0.04 0.06 0.33 1.00 0.01 0.14 -0.00 0.12 0.30 0.03 -0.01 0.06 0.31 0.13 0.15 0.06 0.17 0.07 0.09 -0.13 -0.02 -0.01 0.08 0.13 0.14 0.17 0.14 0.17 0.08 0.21 0.18 0.02 0.11 0.04 0.07 -0.05 -0.05 0.05 0.22 0.23 0.18 0.11 0.23 0.17 -0.01 0.14 0.11 0.13 0.00 -0.02 0.11 0.18 0.04 0.11 0.19 0.07 0.22 0.02 0.06 0.28 0.00 0.05 -0.06
Viols sur des majeur(e)s 0.07 -0.45 -0.16 -0.16 0.88 -0.26 0.83 0.38 0.56 0.86 0.78 0.88 0.92 0.92 -0.66 -0.71 -0.41 -0.28 -0.64 -0.60 -0.43 -0.69 -0.40 0.17 -0.15 0.07 0.35 -0.18 -0.48 -0.59 -0.53 0.77 -0.07 -0.50 -0.64 -0.66 -0.56 -0.71 -0.11 0.12 -0.32 0.07 0.48 0.31 0.01 1.00 0.91 0.94 0.84 0.24 -0.14 0.91 0.68 -0.28 0.57 0.71 0.65 -0.30 0.65 -0.48 0.17 0.37 0.12 -0.36 -0.32 -0.10 -0.54 -0.75 -0.51 0.42 -0.52 0.24 0.78 0.64 -0.25 -0.28 0.93 0.79 0.03 -0.10 -0.17 0.37 0.61 -0.44 0.44 0.14 0.01 -0.11 -0.47 0.64 0.74 -0.65 0.09 0.47 -0.42 -0.33 -0.09 -0.58 0.55 0.43 -0.05 0.79 0.81 0.82
Viols sur des mineur(e)s 0.14 -0.37 -0.08 -0.07 0.83 -0.18 0.73 0.47 0.56 0.82 0.82 0.80 0.85 0.84 -0.49 -0.57 -0.33 -0.17 -0.47 -0.47 -0.26 -0.50 -0.20 0.29 -0.08 0.12 0.38 0.01 -0.28 -0.38 -0.38 0.80 0.09 -0.39 -0.48 -0.56 -0.42 -0.51 -0.04 0.11 -0.19 0.04 0.43 0.43 0.14 0.91 1.00 0.90 0.94 0.19 -0.08 0.88 0.61 -0.18 0.55 0.74 0.57 -0.28 0.63 -0.39 0.09 0.34 0.08 -0.28 -0.17 0.01 -0.34 -0.59 -0.53 0.35 -0.42 0.25 0.69 0.60 -0.22 -0.24 0.87 0.72 -0.03 -0.03 0.02 0.36 0.61 -0.39 0.44 0.21 0.07 -0.03 -0.27 0.64 0.67 -0.50 0.11 0.42 -0.36 -0.21 -0.01 -0.48 0.55 0.45 0.02 0.72 0.80 0.71
Harcèlements sexuels et autres agressions sexuelles contre des majeur(e)s 0.09 -0.38 -0.10 -0.07 0.89 -0.16 0.78 0.42 0.54 0.88 0.75 0.84 0.90 0.94 -0.59 -0.69 -0.40 -0.21 -0.57 -0.57 -0.39 -0.67 -0.30 0.27 -0.17 0.01 0.43 -0.09 -0.44 -0.48 -0.44 0.80 -0.04 -0.49 -0.56 -0.63 -0.49 -0.66 -0.12 0.18 -0.30 0.12 0.49 0.34 -0.00 0.94 0.90 1.00 0.87 0.15 -0.11 0.92 0.63 -0.25 0.53 0.70 0.64 -0.37 0.71 -0.42 0.11 0.31 0.04 -0.30 -0.27 -0.12 -0.55 -0.74 -0.61 0.40 -0.46 0.12 0.72 0.60 -0.14 -0.24 0.91 0.83 0.08 -0.01 -0.18 0.40 0.60 -0.43 0.46 0.20 0.04 -0.10 -0.37 0.60 0.68 -0.56 0.15 0.45 -0.42 -0.25 0.03 -0.51 0.61 0.50 -0.09 0.82 0.78 0.77
Harcèlements sexuels et autres agressions sexuelles contre des mineur(e)s 0.12 -0.33 -0.03 -0.00 0.82 -0.18 0.61 0.48 0.60 0.81 0.78 0.72 0.78 0.81 -0.38 -0.56 -0.30 -0.14 -0.38 -0.45 -0.19 -0.43 -0.09 0.37 -0.13 0.06 0.44 0.15 -0.21 -0.22 -0.27 0.84 0.08 -0.22 -0.35 -0.48 -0.28 -0.41 -0.14 0.15 -0.19 0.05 0.41 0.43 0.12 0.84 0.94 0.87 1.00 0.08 -0.01 0.86 0.53 -0.19 0.64 0.68 0.50 -0.40 0.69 -0.29 0.05 0.25 -0.04 -0.24 -0.16 -0.05 -0.28 -0.53 -0.66 0.22 -0.45 0.09 0.60 0.51 -0.12 -0.15 0.83 0.73 -0.00 -0.05 0.03 0.26 0.55 -0.52 0.54 0.20 0.07 0.02 -0.14 0.56 0.54 -0.41 0.12 0.31 -0.41 -0.16 0.01 -0.43 0.50 0.54 -0.07 0.72 0.73 0.62
Atteintes sexuelles 0.11 -0.23 -0.12 -0.32 0.05 -0.05 0.42 -0.11 -0.08 0.15 0.20 0.35 0.29 0.26 -0.36 -0.28 -0.05 -0.29 -0.44 -0.37 -0.31 -0.27 -0.48 -0.25 0.25 0.46 -0.22 -0.32 -0.25 -0.34 -0.25 0.11 -0.01 -0.33 -0.45 0.05 -0.28 -0.21 0.45 0.21 0.37 0.50 0.52 0.39 0.30 0.24 0.19 0.15 0.08 1.00 -0.13 0.12 0.33 0.35 0.05 0.31 0.35 0.54 0.08 -0.30 -0.11 0.34 0.36 -0.19 -0.16 0.43 0.01 -0.12 0.42 0.37 -0.11 0.67 0.40 0.33 -0.39 -0.17 0.10 0.11 0.02 0.01 0.12 0.33 0.35 0.22 0.06 -0.20 0.05 -0.09 -0.34 0.35 0.37 -0.34 0.13 0.33 0.06 -0.19 -0.28 -0.08 0.22 -0.17 0.27 0.05 0.36 0.25
Homicides commis contre enfants de moins de 15 ans 0.09 0.15 0.19 0.23 -0.05 0.17 -0.25 0.16 0.03 -0.10 -0.09 -0.21 -0.18 -0.12 0.28 0.15 0.07 0.06 0.28 0.13 0.21 0.24 0.21 0.22 -0.10 -0.10 0.00 0.27 0.27 0.27 0.28 -0.01 -0.02 0.27 0.29 0.14 0.28 0.23 -0.11 -0.13 0.05 -0.04 -0.15 0.05 0.03 -0.14 -0.08 -0.11 -0.01 -0.13 1.00 -0.12 -0.16 -0.04 0.04 -0.11 -0.24 -0.04 -0.01 0.22 -0.07 -0.10 -0.12 0.19 0.17 -0.05 0.21 0.23 -0.05 -0.22 0.16 -0.16 -0.24 -0.20 0.16 -0.00 -0.11 -0.08 0.00 0.16 0.16 -0.14 -0.19 0.04 -0.01 0.08 0.20 0.13 0.32 -0.11 -0.23 0.25 -0.02 -0.22 -0.02 0.17 0.08 0.23 -0.04 0.10 -0.04 -0.13 -0.15 -0.25
Violences, mauvais traitements et abandons d'enfants. 0.02 -0.48 -0.25 -0.17 0.86 -0.33 0.84 0.34 0.48 0.93 0.84 0.90 0.96 0.86 -0.71 -0.69 -0.40 -0.15 -0.66 -0.59 -0.46 -0.75 -0.36 0.19 -0.09 0.04 0.43 -0.22 -0.57 -0.56 -0.61 0.76 0.09 -0.52 -0.67 -0.75 -0.64 -0.75 -0.08 0.18 -0.36 -0.04 0.47 0.38 -0.01 0.91 0.88 0.92 0.86 0.12 -0.12 1.00 0.71 -0.15 0.57 0.81 0.77 -0.41 0.69 -0.48 0.15 0.28 0.05 -0.42 -0.41 -0.19 -0.65 -0.84 -0.59 0.53 -0.58 0.15 0.80 0.74 -0.20 -0.26 0.90 0.74 -0.02 -0.09 -0.22 0.49 0.72 -0.45 0.54 0.12 -0.01 -0.14 -0.49 0.64 0.73 -0.66 0.26 0.57 -0.39 -0.27 -0.07 -0.59 0.66 0.51 -0.04 0.86 0.81 0.87
Délits au sujet de la garde des mineurs 0.10 -0.54 -0.27 -0.31 0.56 -0.33 0.79 0.16 0.13 0.73 0.70 0.82 0.77 0.65 -0.67 -0.46 -0.34 -0.12 -0.62 -0.43 -0.42 -0.58 -0.36 0.05 0.30 0.39 0.35 -0.37 -0.49 -0.64 -0.63 0.57 0.28 -0.61 -0.74 -0.62 -0.68 -0.63 0.14 0.23 0.05 0.08 0.59 0.43 0.06 0.68 0.61 0.63 0.53 0.33 -0.16 0.71 1.00 0.22 0.19 0.65 0.77 0.07 0.37 -0.57 0.04 0.32 0.24 -0.44 -0.39 0.04 -0.47 -0.68 -0.20 0.51 -0.56 0.45 0.75 0.74 -0.51 -0.35 0.57 0.49 -0.18 -0.02 -0.00 0.54 0.76 -0.14 0.30 0.05 -0.17 -0.16 -0.50 0.66 0.76 -0.63 0.17 0.57 -0.15 -0.43 -0.20 -0.48 0.55 0.16 0.11 0.62 0.82 0.78
Non versement de pension alimentaire 0.05 -0.06 -0.17 -0.11 -0.35 -0.01 0.04 -0.24 -0.44 -0.11 0.05 0.02 -0.08 -0.24 -0.05 0.28 0.14 0.22 0.02 0.18 0.07 0.15 0.02 -0.12 0.63 0.51 0.00 -0.24 -0.00 -0.03 -0.04 -0.15 0.60 -0.14 -0.09 0.13 -0.11 0.16 0.58 0.21 0.59 0.14 0.27 0.36 0.31 -0.28 -0.18 -0.25 -0.19 0.35 -0.04 -0.15 0.22 1.00 -0.29 0.09 0.28 0.44 -0.19 -0.05 -0.37 -0.02 0.20 -0.07 -0.07 0.30 0.15 0.12 0.44 0.34 0.10 0.33 0.02 0.29 -0.19 0.01 -0.38 -0.29 -0.17 0.23 0.36 0.42 0.33 0.53 0.03 -0.05 -0.13 0.06 0.01 0.09 0.09 0.06 0.31 0.31 0.34 0.09 -0.06 0.19 0.13 -0.19 0.37 -0.11 0.10 -0.04
Trafic et revente sans usage de stupéfiants -0.09 -0.10 -0.05 0.08 0.54 -0.10 0.28 0.34 0.65 0.45 0.44 0.36 0.48 0.50 -0.20 -0.43 -0.13 -0.17 -0.24 -0.29 -0.10 -0.35 -0.13 0.20 -0.46 -0.33 0.21 0.14 -0.18 -0.11 -0.16 0.44 -0.05 0.21 -0.11 -0.32 -0.09 -0.35 -0.27 0.00 -0.45 -0.17 0.01 0.33 0.13 0.57 0.55 0.53 0.64 0.05 0.04 0.57 0.19 -0.29 1.00 0.55 0.24 -0.53 0.65 0.01 0.06 0.00 -0.19 -0.06 -0.10 -0.37 -0.29 -0.32 -0.49 0.12 -0.20 -0.22 0.26 0.27 0.30 0.08 0.62 0.45 0.19 0.03 -0.20 0.08 0.18 -0.46 0.74 -0.04 0.35 0.13 -0.02 0.23 0.19 -0.16 0.33 0.09 -0.31 0.18 0.01 -0.17 0.24 0.71 -0.10 0.48 0.23 0.30
Usage-revente de stupéfiants 0.00 -0.42 -0.21 -0.18 0.61 -0.29 0.77 0.22 0.34 0.77 0.82 0.79 0.84 0.67 -0.60 -0.42 -0.23 0.02 -0.56 -0.38 -0.34 -0.61 -0.30 0.18 0.05 0.15 0.27 -0.24 -0.45 -0.51 -0.55 0.57 0.35 -0.43 -0.61 -0.60 -0.59 -0.63 0.22 0.13 -0.13 -0.01 0.42 0.64 0.15 0.71 0.74 0.70 0.68 0.31 -0.11 0.81 0.65 0.09 0.55 1.00 0.77 -0.17 0.61 -0.35 0.02 0.26 0.13 -0.40 -0.37 -0.03 -0.51 -0.65 -0.27 0.64 -0.43 0.30 0.70 0.76 -0.19 -0.22 0.68 0.53 0.01 0.01 -0.07 0.61 0.72 -0.10 0.58 0.06 0.14 -0.04 -0.38 0.69 0.76 -0.48 0.51 0.65 -0.15 -0.02 -0.07 -0.36 0.69 0.47 0.23 0.65 0.70 0.72
Usage de stupéfiants -0.07 -0.61 -0.44 -0.38 0.54 -0.50 0.90 -0.03 0.06 0.76 0.70 0.89 0.84 0.62 -0.87 -0.50 -0.33 -0.02 -0.80 -0.51 -0.56 -0.79 -0.55 -0.06 0.34 0.35 0.35 -0.53 -0.77 -0.74 -0.80 0.51 0.37 -0.72 -0.88 -0.73 -0.86 -0.79 0.30 0.39 -0.04 0.08 0.65 0.45 0.06 0.65 0.57 0.64 0.50 0.35 -0.24 0.77 0.77 0.28 0.24 0.77 1.00 -0.06 0.44 -0.57 0.02 0.26 0.22 -0.62 -0.62 -0.01 -0.70 -0.86 -0.19 0.79 -0.65 0.41 0.86 0.93 -0.44 -0.32 0.54 0.47 -0.03 -0.08 -0.19 0.74 0.89 -0.07 0.43 -0.07 -0.17 -0.25 -0.71 0.61 0.82 -0.72 0.43 0.82 -0.15 -0.37 -0.24 -0.53 0.67 0.23 0.17 0.76 0.79 0.91
Autres infractions à la législation sur les stupéfiants 0.28 -0.10 0.09 -0.24 -0.45 0.10 -0.05 -0.29 -0.47 -0.28 -0.15 -0.12 -0.23 -0.26 0.05 0.25 0.02 -0.09 0.02 0.03 -0.03 0.26 -0.11 -0.30 0.44 0.54 -0.40 -0.20 0.17 -0.05 0.07 -0.23 0.07 -0.16 -0.09 0.32 0.01 0.26 0.41 -0.08 0.68 0.34 0.25 0.11 0.17 -0.30 -0.28 -0.37 -0.40 0.54 -0.04 -0.41 0.07 0.44 -0.53 -0.17 -0.06 1.00 -0.53 -0.15 -0.15 0.17 0.33 0.04 0.11 0.64 0.45 0.34 0.71 0.03 0.17 0.65 -0.05 -0.07 -0.54 -0.17 -0.42 -0.33 -0.32 -0.05 0.51 -0.01 0.05 0.45 -0.46 -0.02 -0.17 0.01 -0.03 0.17 0.05 -0.05 -0.21 0.07 0.29 -0.16 -0.25 0.16 -0.12 -0.65 0.25 -0.44 0.06 -0.18
Délits de débits de boissons et infraction à la règlementation sur l'alcool et le tabac -0.10 -0.13 -0.06 0.12 0.67 -0.03 0.45 0.35 0.51 0.62 0.50 0.52 0.63 0.67 -0.30 -0.51 -0.13 -0.07 -0.34 -0.35 -0.21 -0.52 -0.11 0.34 -0.33 -0.24 0.38 0.12 -0.29 -0.17 -0.20 0.55 0.01 -0.13 -0.25 -0.38 -0.20 -0.44 -0.09 0.25 -0.35 0.10 0.22 0.40 0.07 0.65 0.63 0.71 0.69 0.08 -0.01 0.69 0.37 -0.19 0.65 0.61 0.44 -0.53 1.00 -0.09 0.00 0.08 -0.14 -0.18 -0.19 -0.28 -0.45 -0.51 -0.56 0.27 -0.27 -0.16 0.42 0.41 0.24 -0.02 0.68 0.61 0.34 0.11 -0.23 0.37 0.36 -0.32 0.63 0.18 0.28 -0.03 -0.09 0.31 0.38 -0.19 0.42 0.27 -0.26 0.09 0.14 -0.18 0.48 0.72 -0.03 0.62 0.42 0.45
Fraudes alimentaires et infractions à l'hygiène -0.09 0.49 0.26 0.41 -0.37 0.36 -0.63 0.01 -0.00 -0.52 -0.46 -0.63 -0.56 -0.45 0.64 0.45 0.38 0.16 0.62 0.48 0.43 0.54 0.46 0.36 -0.28 -0.37 -0.14 0.39 0.49 0.57 0.59 -0.40 -0.03 0.59 0.69 0.48 0.61 0.52 -0.09 -0.17 -0.02 -0.14 -0.52 -0.09 0.09 -0.48 -0.39 -0.42 -0.29 -0.30 0.22 -0.48 -0.57 -0.05 0.01 -0.35 -0.57 -0.15 -0.09 1.00 -0.11 -0.35 -0.30 0.41 0.40 -0.17 0.36 0.56 0.08 -0.41 0.49 -0.46 -0.64 -0.50 0.57 0.39 -0.39 -0.32 0.23 0.24 0.11 -0.32 -0.56 0.23 -0.02 0.02 0.26 0.27 0.60 -0.45 -0.54 0.69 0.11 -0.43 0.24 0.59 0.25 0.53 -0.36 0.12 -0.04 -0.42 -0.62 -0.65
Autres délits contre santé publique et la réglementation des professions médicales -0.06 -0.07 -0.04 -0.08 0.20 -0.13 0.13 0.08 0.05 0.10 0.04 0.12 0.12 0.12 -0.15 -0.21 -0.12 -0.12 -0.17 -0.17 -0.17 -0.21 -0.21 -0.09 -0.25 -0.24 -0.17 -0.10 -0.17 -0.21 -0.24 -0.15 -0.33 -0.11 -0.16 -0.25 -0.22 -0.26 -0.21 -0.03 -0.37 -0.32 -0.24 -0.15 -0.13 0.17 0.09 0.11 0.05 -0.11 -0.07 0.15 0.04 -0.37 0.06 0.02 0.02 -0.15 0.00 -0.11 1.00 -0.01 -0.08 -0.09 -0.11 -0.25 -0.27 -0.22 -0.15 -0.04 -0.16 0.04 0.17 -0.01 -0.03 -0.07 0.23 0.15 -0.06 -0.11 -0.26 -0.04 -0.04 -0.17 -0.07 -0.06 0.03 -0.06 -0.18 -0.10 0.04 -0.16 -0.15 -0.04 -0.12 -0.15 0.00 -0.17 -0.07 -0.00 -0.15 0.11 0.04 0.20
Incendies volontaires de biens publics 0.14 -0.22 -0.08 -0.18 0.30 -0.12 0.43 0.04 0.08 0.34 0.40 0.41 0.37 0.37 -0.32 -0.27 -0.17 -0.13 -0.31 -0.31 -0.21 -0.19 -0.20 -0.00 0.24 0.44 0.02 -0.12 -0.11 -0.25 -0.22 0.39 0.01 -0.30 -0.35 -0.12 -0.25 -0.20 0.18 0.02 0.18 0.31 0.47 0.20 -0.02 0.37 0.34 0.31 0.25 0.34 -0.10 0.28 0.32 -0.02 0.00 0.26 0.26 0.17 0.08 -0.35 -0.01 1.00 0.85 -0.15 -0.07 0.55 0.06 -0.17 0.02 0.19 -0.26 0.52 0.51 0.31 -0.41 -0.24 0.29 0.26 -0.17 -0.13 0.10 0.09 0.31 -0.11 -0.00 -0.03 -0.07 0.01 -0.26 0.48 0.42 -0.38 -0.09 0.28 -0.11 -0.23 -0.20 -0.29 0.29 -0.11 0.11 0.18 0.51 0.36
Incendies volontaires de biens privés 0.04 -0.20 -0.15 -0.23 0.03 -0.15 0.33 -0.17 -0.16 0.13 0.24 0.26 0.18 0.09 -0.28 -0.00 -0.08 -0.01 -0.23 -0.10 -0.12 -0.07 -0.19 -0.14 0.44 0.54 -0.06 -0.29 -0.11 -0.28 -0.24 0.11 0.17 -0.29 -0.33 -0.06 -0.27 -0.13 0.32 -0.04 0.29 0.22 0.37 0.14 -0.01 0.12 0.08 0.04 -0.04 0.36 -0.12 0.05 0.24 0.20 -0.19 0.13 0.22 0.33 -0.14 -0.30 -0.08 0.85 1.00 -0.19 -0.10 0.53 0.10 -0.05 0.32 0.27 -0.20 0.55 0.36 0.29 -0.46 -0.21 0.00 -0.03 -0.21 -0.17 0.14 0.12 0.27 0.13 -0.12 -0.14 -0.14 0.01 -0.28 0.33 0.34 -0.30 -0.04 0.32 0.08 -0.22 -0.27 -0.22 0.17 -0.29 0.21 -0.00 0.33 0.24
Attentats à l'explosif contre des biens publics 0.11 0.48 0.35 0.37 -0.27 0.46 -0.59 0.18 0.03 -0.42 -0.38 -0.55 -0.48 -0.29 0.62 0.31 0.24 0.05 0.57 0.37 0.42 0.49 0.46 0.19 -0.29 -0.33 -0.11 0.43 0.58 0.55 0.61 -0.26 -0.18 0.46 0.63 0.44 0.58 0.53 -0.20 -0.26 0.01 -0.05 -0.45 -0.11 0.08 -0.36 -0.28 -0.30 -0.24 -0.19 0.19 -0.42 -0.44 -0.07 -0.06 -0.40 -0.62 0.04 -0.18 0.41 -0.09 -0.15 -0.19 1.00 0.64 -0.02 0.45 0.57 0.04 -0.48 0.63 -0.34 -0.57 -0.58 0.47 0.23 -0.27 -0.20 -0.02 0.35 0.17 -0.33 -0.50 0.15 -0.21 0.26 0.18 0.24 0.62 -0.34 -0.55 0.56 -0.16 -0.55 0.10 0.38 0.36 0.48 -0.29 -0.02 -0.05 -0.43 -0.45 -0.61
Attentats à l'explosif contre des biens privés 0.24 0.50 0.37 0.37 -0.24 0.48 -0.54 0.19 0.06 -0.37 -0.29 -0.50 -0.46 -0.26 0.62 0.34 0.22 0.05 0.60 0.37 0.46 0.56 0.49 0.21 -0.16 -0.14 -0.09 0.48 0.69 0.59 0.59 -0.17 -0.12 0.43 0.63 0.51 0.62 0.61 -0.10 -0.22 0.15 0.03 -0.37 -0.05 0.13 -0.32 -0.17 -0.27 -0.16 -0.16 0.17 -0.41 -0.39 -0.07 -0.10 -0.37 -0.62 0.11 -0.19 0.40 -0.11 -0.07 -0.10 0.64 1.00 0.13 0.58 0.63 0.08 -0.49 0.59 -0.19 -0.51 -0.55 0.33 0.21 -0.24 -0.21 -0.06 0.28 0.30 -0.33 -0.45 0.16 -0.28 0.31 0.17 0.21 0.64 -0.27 -0.50 0.53 -0.23 -0.55 0.10 0.35 0.24 0.46 -0.28 -0.04 -0.00 -0.48 -0.36 -0.59
Autres destructions er dégradations de biens publics 0.25 -0.14 0.10 -0.17 -0.18 0.01 0.09 -0.16 -0.25 -0.06 0.08 0.03 -0.05 -0.01 0.07 0.11 -0.04 -0.04 0.05 -0.06 0.00 0.29 0.03 -0.09 0.49 0.69 -0.29 0.12 0.30 0.17 0.18 0.13 0.13 -0.09 -0.01 0.42 0.14 0.38 0.54 0.11 0.74 0.59 0.45 0.23 0.14 -0.10 0.01 -0.12 -0.05 0.43 -0.05 -0.19 0.04 0.30 -0.37 -0.03 -0.01 0.64 -0.28 -0.17 -0.25 0.55 0.53 -0.02 0.13 1.00 0.59 0.34 0.41 0.00 0.01 0.70 0.14 0.02 -0.55 -0.19 -0.21 -0.02 -0.21 -0.13 0.51 -0.06 0.12 0.23 -0.27 0.01 -0.10 0.09 0.05 0.32 0.18 -0.04 -0.20 0.15 0.14 -0.12 -0.20 0.01 0.01 -0.46 0.23 -0.25 0.25 -0.08
Autres destructions er dégradations de biens privés 0.24 0.34 0.40 0.20 -0.51 0.33 -0.64 -0.04 -0.16 -0.55 -0.36 -0.62 -0.65 -0.48 0.75 0.52 0.27 0.08 0.70 0.43 0.56 0.87 0.54 0.10 0.15 0.27 -0.32 0.54 0.85 0.72 0.75 -0.21 0.01 0.59 0.71 0.78 0.77 0.90 0.08 -0.26 0.60 0.24 -0.16 -0.05 0.17 -0.54 -0.34 -0.55 -0.28 0.01 0.21 -0.65 -0.47 0.15 -0.29 -0.51 -0.70 0.45 -0.45 0.36 -0.27 0.06 0.10 0.45 0.58 0.59 1.00 0.90 0.36 -0.62 0.46 0.12 -0.59 -0.60 -0.05 0.15 -0.53 -0.39 -0.19 0.02 0.65 -0.56 -0.49 0.15 -0.38 0.10 0.06 0.34 0.66 -0.18 -0.50 0.53 -0.41 -0.54 0.19 0.22 0.03 0.43 -0.46 -0.39 0.06 -0.70 -0.36 -0.74
Destructions et dégradations de véhicules privés 0.13 0.54 0.41 0.31 -0.68 0.45 -0.85 -0.09 -0.23 -0.79 -0.61 -0.86 -0.86 -0.71 0.88 0.65 0.40 0.13 0.83 0.59 0.63 0.93 0.58 0.04 -0.01 0.00 -0.40 0.49 0.85 0.78 0.83 -0.51 -0.05 0.70 0.87 0.87 0.86 0.94 0.06 -0.31 0.42 0.07 -0.46 -0.18 0.14 -0.75 -0.59 -0.74 -0.53 -0.12 0.23 -0.84 -0.68 0.12 -0.32 -0.65 -0.86 0.34 -0.51 0.56 -0.22 -0.17 -0.05 0.57 0.63 0.34 0.90 1.00 0.43 -0.65 0.68 -0.13 -0.82 -0.76 0.25 0.29 -0.70 -0.58 -0.06 0.12 0.48 -0.59 -0.71 0.31 -0.41 0.03 0.15 0.33 0.74 -0.47 -0.72 0.75 -0.29 -0.63 0.32 0.42 0.16 0.61 -0.59 -0.35 0.06 -0.83 -0.68 -0.94
Infractions aux conditions générales d'entrée et de séjour des étrangers 0.02 0.04 -0.05 -0.21 -0.66 0.05 -0.20 -0.40 -0.50 -0.55 -0.35 -0.36 -0.42 -0.56 0.14 0.47 0.24 0.03 0.16 0.30 0.09 0.33 -0.10 -0.46 0.36 0.36 -0.51 -0.34 0.11 -0.07 0.05 -0.62 0.18 -0.00 0.04 0.39 0.04 0.27 0.53 -0.19 0.46 0.08 -0.12 -0.06 0.17 -0.51 -0.53 -0.61 -0.66 0.42 -0.05 -0.59 -0.20 0.44 -0.49 -0.27 -0.19 0.71 -0.56 0.08 -0.15 0.02 0.32 0.04 0.08 0.41 0.36 0.43 1.00 0.17 0.35 0.47 -0.22 -0.06 -0.27 0.02 -0.61 -0.62 -0.12 -0.07 0.34 -0.04 -0.18 0.64 -0.40 -0.25 -0.05 0.02 -0.04 -0.11 -0.08 0.16 -0.01 0.11 0.47 0.05 -0.23 0.25 -0.24 -0.60 0.33 -0.64 -0.30 -0.34
Aide à l'entrée, à la circulation et au séjour des étrangers -0.13 -0.41 -0.44 -0.34 0.27 -0.31 0.72 -0.09 -0.02 0.46 0.50 0.64 0.65 0.35 -0.73 -0.28 -0.23 -0.03 -0.64 -0.33 -0.49 -0.66 -0.53 -0.24 0.24 0.22 0.09 -0.65 -0.70 -0.71 -0.70 0.17 0.36 -0.67 -0.74 -0.57 -0.76 -0.68 0.46 0.18 -0.09 -0.03 0.36 0.31 0.08 0.42 0.35 0.40 0.22 0.37 -0.22 0.53 0.51 0.34 0.12 0.64 0.79 0.03 0.27 -0.41 -0.04 0.19 0.27 -0.48 -0.49 0.00 -0.62 -0.65 0.17 1.00 -0.29 0.39 0.66 0.81 -0.24 -0.21 0.33 0.20 0.02 -0.05 -0.15 0.69 0.67 0.23 0.29 -0.14 -0.09 -0.22 -0.66 0.43 0.70 -0.55 0.52 0.86 0.05 -0.14 -0.17 -0.38 0.57 0.11 0.26 0.47 0.51 0.68
Autres infractions à la police des étrangers 0.06 0.61 0.25 0.40 -0.51 0.59 -0.65 0.08 -0.12 -0.62 -0.51 -0.67 -0.59 -0.50 0.63 0.44 0.30 0.05 0.61 0.47 0.41 0.54 0.39 -0.03 -0.27 -0.34 -0.27 0.25 0.54 0.50 0.61 -0.52 -0.06 0.35 0.64 0.54 0.59 0.59 0.01 -0.35 0.05 -0.08 -0.57 -0.19 0.21 -0.52 -0.42 -0.46 -0.45 -0.11 0.16 -0.58 -0.56 0.10 -0.20 -0.43 -0.65 0.17 -0.27 0.49 -0.16 -0.26 -0.20 0.63 0.59 0.01 0.46 0.68 0.35 -0.29 1.00 -0.26 -0.65 -0.56 0.54 0.24 -0.45 -0.44 0.08 0.33 0.17 -0.26 -0.58 0.44 -0.33 0.17 0.18 0.17 0.53 -0.46 -0.59 0.60 -0.07 -0.43 0.33 0.59 0.34 0.58 -0.31 -0.11 0.12 -0.58 -0.63 -0.73
Outrages à dépositaires autorité 0.21 -0.45 -0.13 -0.44 0.06 -0.26 0.54 -0.13 -0.21 0.22 0.37 0.45 0.33 0.22 -0.42 -0.13 -0.19 -0.15 -0.41 -0.29 -0.30 -0.14 -0.40 -0.28 0.54 0.75 -0.27 -0.36 -0.18 -0.42 -0.37 0.16 0.19 -0.47 -0.53 -0.06 -0.42 -0.16 0.54 0.09 0.52 0.35 0.57 0.31 0.18 0.24 0.25 0.12 0.09 0.67 -0.16 0.15 0.45 0.33 -0.22 0.30 0.41 0.65 -0.16 -0.46 0.04 0.52 0.55 -0.34 -0.19 0.70 0.12 -0.13 0.47 0.39 -0.26 1.00 0.57 0.47 -0.78 -0.33 0.09 0.06 -0.30 -0.19 0.32 0.26 0.48 0.22 -0.17 -0.10 -0.21 -0.07 -0.43 0.52 0.55 -0.46 -0.10 0.48 0.07 -0.39 -0.42 -0.28 0.23 -0.45 0.31 0.04 0.56 0.39
Violences à dépositaires autorité 0.02 -0.61 -0.35 -0.41 0.66 -0.46 0.95 0.11 0.20 0.79 0.75 0.93 0.89 0.74 -0.86 -0.60 -0.39 -0.17 -0.81 -0.60 -0.60 -0.77 -0.58 -0.06 0.26 0.38 0.27 -0.46 -0.69 -0.74 -0.79 0.60 0.15 -0.72 -0.88 -0.69 -0.82 -0.78 0.20 0.30 -0.09 0.13 0.66 0.36 0.02 0.78 0.69 0.72 0.60 0.40 -0.24 0.80 0.75 0.02 0.26 0.70 0.86 -0.05 0.42 -0.64 0.17 0.51 0.36 -0.57 -0.51 0.14 -0.59 -0.82 -0.22 0.66 -0.65 0.57 1.00 0.84 -0.51 -0.37 0.67 0.55 -0.08 -0.18 -0.22 0.56 0.80 -0.20 0.33 -0.07 -0.16 -0.22 -0.73 0.65 0.83 -0.79 0.20 0.71 -0.26 -0.45 -0.28 -0.63 0.64 0.16 0.13 0.73 0.87 0.93
Port ou détention armes prohibées -0.10 -0.58 -0.41 -0.38 0.50 -0.50 0.87 0.03 0.11 0.71 0.75 0.85 0.81 0.55 -0.80 -0.37 -0.28 0.02 -0.68 -0.37 -0.45 -0.66 -0.48 -0.05 0.34 0.38 0.30 -0.55 -0.68 -0.74 -0.77 0.44 0.47 -0.65 -0.81 -0.71 -0.82 -0.73 0.33 0.20 -0.05 -0.04 0.54 0.43 0.11 0.64 0.60 0.60 0.51 0.33 -0.20 0.74 0.74 0.29 0.27 0.76 0.93 -0.07 0.41 -0.50 -0.01 0.31 0.29 -0.58 -0.55 0.02 -0.60 -0.76 -0.06 0.81 -0.56 0.47 0.84 1.00 -0.43 -0.31 0.53 0.36 -0.08 -0.11 -0.07 0.67 0.83 -0.02 0.40 -0.07 -0.15 -0.17 -0.67 0.64 0.83 -0.67 0.39 0.83 -0.11 -0.32 -0.26 -0.52 0.65 0.18 0.24 0.67 0.77 0.85
Atteintes aux intérêts fondamentaux de la Nation -0.18 0.59 0.18 0.50 -0.09 0.45 -0.52 0.21 0.22 -0.31 -0.38 -0.47 -0.32 -0.21 0.45 0.16 0.26 0.12 0.43 0.32 0.31 0.14 0.35 0.23 -0.60 -0.79 0.13 0.37 0.25 0.46 0.43 -0.28 -0.13 0.47 0.57 0.21 0.47 0.22 -0.30 -0.07 -0.45 -0.25 -0.63 -0.10 0.04 -0.25 -0.22 -0.14 -0.12 -0.39 0.16 -0.20 -0.51 -0.19 0.30 -0.19 -0.44 -0.54 0.24 0.57 -0.03 -0.41 -0.46 0.47 0.33 -0.55 -0.05 0.25 -0.27 -0.24 0.54 -0.78 -0.51 -0.43 1.00 0.44 -0.10 -0.10 0.43 0.41 -0.30 -0.10 -0.50 0.06 0.21 0.11 0.36 0.14 0.49 -0.57 -0.56 0.57 0.32 -0.42 0.08 0.64 0.49 0.45 -0.14 0.52 -0.08 -0.12 -0.61 -0.47
Délits des courses et des jeux -0.13 0.32 0.06 0.18 -0.22 0.12 -0.37 0.04 0.04 -0.31 -0.27 -0.36 -0.32 -0.26 0.33 0.23 0.28 0.03 0.33 0.27 0.32 0.26 0.24 0.03 -0.16 -0.26 -0.05 0.20 0.22 0.33 0.29 -0.24 0.02 0.41 0.40 0.28 0.34 0.27 -0.06 -0.02 -0.04 -0.10 -0.29 -0.08 0.07 -0.28 -0.24 -0.24 -0.15 -0.17 -0.00 -0.26 -0.35 0.01 0.08 -0.22 -0.32 -0.17 -0.02 0.39 -0.07 -0.24 -0.21 0.23 0.21 -0.19 0.15 0.29 0.02 -0.21 0.24 -0.33 -0.37 -0.31 0.44 1.00 -0.22 -0.18 0.20 0.19 -0.02 -0.16 -0.31 0.03 0.09 -0.07 0.08 0.10 0.35 -0.36 -0.38 0.39 0.09 -0.31 0.11 0.31 0.10 0.29 -0.25 0.14 -0.07 -0.20 -0.39 -0.37
Délits interdiction de séjour et de paraître 0.07 -0.37 -0.10 -0.09 0.88 -0.17 0.70 0.40 0.60 0.83 0.74 0.78 0.86 0.88 -0.55 -0.71 -0.38 -0.26 -0.55 -0.58 -0.41 -0.65 -0.30 0.22 -0.31 -0.11 0.29 -0.10 -0.42 -0.48 -0.46 0.72 -0.15 -0.41 -0.52 -0.65 -0.48 -0.67 -0.25 0.03 -0.47 -0.05 0.33 0.24 -0.05 0.93 0.87 0.91 0.83 0.10 -0.11 0.90 0.57 -0.38 0.62 0.68 0.54 -0.42 0.68 -0.39 0.23 0.29 0.00 -0.27 -0.24 -0.21 -0.53 -0.70 -0.61 0.33 -0.45 0.09 0.67 0.53 -0.10 -0.22 1.00 0.77 0.03 -0.06 -0.22 0.29 0.50 -0.53 0.42 0.17 0.06 -0.07 -0.38 0.56 0.60 -0.58 0.07 0.35 -0.47 -0.23 -0.01 -0.54 0.54 0.50 -0.14 0.74 0.71 0.73
Destructions, cruautés et autres délits envers les animaux 0.08 -0.32 -0.04 -0.00 0.81 -0.08 0.61 0.31 0.43 0.76 0.56 0.69 0.73 0.89 -0.42 -0.69 -0.33 -0.22 -0.45 -0.59 -0.36 -0.55 -0.19 0.31 -0.24 -0.03 0.28 0.14 -0.28 -0.23 -0.24 0.72 -0.22 -0.31 -0.38 -0.39 -0.28 -0.46 -0.13 0.36 -0.20 0.32 0.46 0.29 -0.05 0.79 0.72 0.83 0.73 0.11 -0.08 0.74 0.49 -0.29 0.45 0.53 0.47 -0.33 0.61 -0.32 0.15 0.26 -0.03 -0.20 -0.21 -0.02 -0.39 -0.58 -0.62 0.20 -0.44 0.06 0.55 0.36 -0.10 -0.18 0.77 1.00 0.15 0.04 -0.13 0.27 0.44 -0.47 0.41 0.27 0.06 -0.04 -0.20 0.46 0.51 -0.41 0.11 0.27 -0.40 -0.21 0.05 -0.38 0.47 0.48 -0.18 0.68 0.63 0.60
Atteintes à l'environnement -0.19 0.19 0.02 0.21 0.07 0.18 -0.05 -0.01 0.14 -0.10 -0.24 -0.10 -0.02 0.09 0.08 -0.06 0.10 -0.00 -0.01 0.03 -0.03 -0.17 -0.02 0.04 -0.32 -0.35 0.14 0.25 -0.05 0.12 0.14 -0.03 -0.11 0.14 0.12 0.13 0.17 -0.04 0.10 0.37 -0.15 0.24 -0.10 0.06 0.05 0.03 -0.03 0.08 -0.00 0.02 0.00 -0.02 -0.18 -0.17 0.19 0.01 -0.03 -0.32 0.34 0.23 -0.06 -0.17 -0.21 -0.02 -0.06 -0.21 -0.19 -0.06 -0.12 0.02 0.08 -0.30 -0.08 -0.08 0.43 0.20 0.03 0.15 1.00 0.22 -0.32 0.13 -0.13 0.12 0.28 -0.07 0.33 -0.06 0.12 -0.26 -0.05 0.27 0.41 -0.02 0.09 0.25 0.20 0.23 0.02 0.46 -0.03 0.10 -0.22 -0.08
Chasse et pêche 0.05 0.31 0.14 0.26 -0.04 0.37 -0.18 0.14 0.06 -0.08 -0.12 -0.14 -0.09 0.01 0.21 0.11 0.19 0.07 0.19 0.21 0.15 0.08 0.25 0.19 -0.07 -0.21 0.19 0.28 0.25 0.22 0.26 -0.06 0.16 0.14 0.22 0.09 0.17 0.14 0.08 0.16 0.09 0.04 -0.12 0.26 0.22 -0.10 -0.03 -0.01 -0.05 0.01 0.16 -0.09 -0.02 0.23 0.03 0.01 -0.08 -0.05 0.11 0.24 -0.11 -0.13 -0.17 0.35 0.28 -0.13 0.02 0.12 -0.07 -0.05 0.33 -0.19 -0.18 -0.11 0.41 0.19 -0.06 0.04 0.22 1.00 -0.01 0.28 -0.05 0.31 0.11 0.23 0.28 0.09 0.37 -0.22 -0.19 0.36 0.31 -0.21 0.16 0.34 0.32 0.45 0.09 0.30 0.15 0.00 -0.12 -0.19
Faux documents d'identité 0.31 0.00 0.23 0.04 -0.24 0.11 -0.19 -0.02 -0.12 -0.14 0.05 -0.17 -0.21 -0.17 0.37 0.33 0.09 0.10 0.40 0.22 0.34 0.55 0.34 0.12 0.26 0.40 -0.16 0.26 0.52 0.28 0.38 0.04 0.27 0.23 0.30 0.38 0.34 0.52 0.23 -0.16 0.63 0.16 0.07 0.20 0.23 -0.17 0.02 -0.18 0.03 0.12 0.16 -0.22 -0.00 0.36 -0.20 -0.07 -0.19 0.51 -0.23 0.11 -0.26 0.10 0.14 0.17 0.30 0.51 0.65 0.48 0.34 -0.15 0.17 0.32 -0.22 -0.07 -0.30 -0.02 -0.22 -0.13 -0.32 -0.01 1.00 -0.17 -0.02 0.16 -0.20 0.25 -0.01 0.29 0.41 0.22 0.01 0.23 -0.20 -0.02 0.15 -0.00 -0.03 0.15 -0.12 -0.29 0.12 -0.36 0.10 -0.30
Faux documents concernant la circulation des véhicules -0.07 -0.24 -0.26 -0.12 0.33 -0.15 0.59 0.00 -0.05 0.49 0.46 0.58 0.56 0.38 -0.56 -0.24 -0.13 0.13 -0.51 -0.21 -0.33 -0.58 -0.30 0.02 0.31 0.17 0.36 -0.32 -0.48 -0.47 -0.52 0.23 0.44 -0.57 -0.59 -0.52 -0.62 -0.53 0.40 0.41 0.03 0.07 0.38 0.54 0.18 0.37 0.36 0.40 0.26 0.33 -0.14 0.49 0.54 0.42 0.08 0.61 0.74 -0.01 0.37 -0.32 -0.04 0.09 0.12 -0.33 -0.33 -0.06 -0.56 -0.59 -0.04 0.69 -0.26 0.26 0.56 0.67 -0.10 -0.16 0.29 0.27 0.13 0.28 -0.17 1.00 0.68 0.33 0.33 0.07 0.03 -0.14 -0.36 0.30 0.52 -0.31 0.62 0.61 0.10 -0.05 0.02 -0.15 0.56 0.31 0.34 0.53 0.49 0.59
Autres faux documents administratifs 0.03 -0.57 -0.35 -0.32 0.52 -0.44 0.83 0.03 0.05 0.75 0.75 0.84 0.79 0.59 -0.75 -0.44 -0.27 -0.03 -0.69 -0.46 -0.46 -0.62 -0.41 0.02 0.42 0.45 0.35 -0.40 -0.56 -0.60 -0.67 0.59 0.40 -0.64 -0.77 -0.63 -0.73 -0.62 0.30 0.31 0.11 0.11 0.68 0.49 0.11 0.61 0.61 0.60 0.55 0.35 -0.19 0.72 0.76 0.33 0.18 0.72 0.89 0.05 0.36 -0.56 -0.04 0.31 0.27 -0.50 -0.45 0.12 -0.49 -0.71 -0.18 0.67 -0.58 0.48 0.80 0.83 -0.50 -0.31 0.50 0.44 -0.13 -0.05 -0.02 0.68 1.00 -0.08 0.34 0.03 -0.18 -0.20 -0.57 0.67 0.76 -0.67 0.34 0.72 -0.12 -0.34 -0.22 -0.50 0.63 0.17 0.19 0.68 0.82 0.82
Faux en écriture publique et authentique -0.01 0.20 0.00 0.04 -0.52 0.22 -0.18 -0.22 -0.43 -0.46 -0.28 -0.29 -0.33 -0.45 0.19 0.53 0.25 0.28 0.22 0.44 0.20 0.25 0.06 -0.15 0.36 0.17 -0.15 -0.14 0.16 0.03 0.14 -0.51 0.38 -0.06 0.10 0.26 0.04 0.24 0.63 0.06 0.40 0.04 -0.14 0.21 0.23 -0.44 -0.39 -0.43 -0.52 0.22 0.04 -0.45 -0.14 0.53 -0.46 -0.10 -0.07 0.45 -0.32 0.23 -0.17 -0.11 0.13 0.15 0.16 0.23 0.15 0.31 0.64 0.23 0.44 0.22 -0.20 -0.02 0.06 0.03 -0.53 -0.47 0.12 0.31 0.16 0.33 -0.08 1.00 -0.20 -0.03 0.13 0.02 0.16 -0.21 -0.07 0.40 0.37 0.15 0.56 0.33 0.12 0.50 -0.06 -0.24 0.49 -0.36 -0.26 -0.29
Autres faux en écriture -0.17 -0.16 -0.12 0.04 0.44 -0.21 0.36 0.21 0.46 0.42 0.43 0.41 0.47 0.42 -0.26 -0.29 -0.05 0.04 -0.27 -0.20 -0.12 -0.38 -0.13 0.21 -0.14 -0.14 0.35 0.05 -0.28 -0.13 -0.22 0.42 0.24 0.13 -0.20 -0.33 -0.20 -0.37 0.05 0.31 -0.19 -0.05 0.19 0.52 0.17 0.44 0.44 0.46 0.54 0.06 -0.01 0.54 0.30 0.03 0.74 0.58 0.43 -0.46 0.63 -0.02 -0.07 -0.00 -0.12 -0.21 -0.28 -0.27 -0.38 -0.41 -0.40 0.29 -0.33 -0.17 0.33 0.40 0.21 0.09 0.42 0.41 0.28 0.11 -0.20 0.33 0.34 -0.20 1.00 -0.12 0.30 0.05 -0.04 0.22 0.28 -0.08 0.61 0.29 -0.12 0.21 0.05 -0.12 0.30 0.70 0.09 0.57 0.28 0.36
Fausse monnaie 0.24 0.12 0.21 0.21 0.19 0.21 -0.04 0.24 0.10 0.20 0.14 0.05 0.09 0.21 0.17 0.02 -0.07 0.11 0.21 0.09 0.13 0.07 0.37 0.33 -0.12 -0.11 0.21 0.32 0.30 0.24 0.20 0.25 0.04 -0.03 0.16 -0.00 0.17 0.15 -0.14 -0.02 0.05 0.11 -0.05 0.13 -0.01 0.14 0.21 0.20 0.20 -0.20 0.08 0.12 0.05 -0.05 -0.04 0.06 -0.07 -0.02 0.18 0.02 -0.06 -0.03 -0.14 0.26 0.31 0.01 0.10 0.03 -0.25 -0.14 0.17 -0.10 -0.07 -0.07 0.11 -0.07 0.17 0.27 -0.07 0.23 0.25 0.07 0.03 -0.03 -0.12 1.00 -0.04 0.11 0.31 0.11 0.03 0.10 -0.08 -0.12 -0.02 0.05 0.18 0.15 0.17 0.13 -0.01 0.07 0.14 -0.04
Contrefaçons et fraudes industrielles et commerciales -0.01 0.27 0.18 0.24 0.04 0.28 -0.15 0.16 0.19 -0.06 -0.06 -0.15 -0.05 0.05 0.26 0.04 0.15 0.15 0.18 0.11 0.20 0.07 0.16 0.19 -0.31 -0.28 0.04 0.33 0.24 0.22 0.27 -0.02 -0.06 0.33 0.26 0.17 0.28 0.10 0.03 0.02 -0.07 0.05 -0.19 0.25 0.14 0.01 0.07 0.04 0.07 0.05 0.20 -0.01 -0.17 -0.13 0.35 0.14 -0.17 -0.17 0.28 0.26 0.03 -0.07 -0.14 0.18 0.17 -0.10 0.06 0.15 -0.05 -0.09 0.18 -0.21 -0.16 -0.15 0.36 0.08 0.06 0.06 0.33 0.28 -0.01 0.03 -0.18 0.13 0.30 -0.04 1.00 0.15 0.36 -0.08 -0.11 0.37 0.38 -0.13 0.10 0.41 0.27 0.36 -0.06 0.44 0.10 -0.05 -0.15 -0.20
Contrefaçons littéraires et artistique 0.08 0.17 0.21 0.19 -0.07 0.14 -0.24 0.14 0.07 -0.11 -0.02 -0.20 -0.17 -0.08 0.33 0.18 0.05 0.18 0.34 0.22 0.29 0.35 0.36 0.19 -0.00 0.03 -0.04 0.25 0.37 0.28 0.32 -0.02 0.07 0.32 0.34 0.22 0.32 0.31 -0.04 -0.15 0.14 -0.02 -0.13 0.05 0.11 -0.11 -0.03 -0.10 0.02 -0.09 0.13 -0.14 -0.16 0.06 0.13 -0.04 -0.25 0.01 -0.03 0.27 -0.06 0.01 0.01 0.24 0.21 0.09 0.34 0.33 0.02 -0.22 0.17 -0.07 -0.22 -0.17 0.14 0.10 -0.07 -0.04 -0.06 0.09 0.29 -0.14 -0.20 0.02 0.05 0.11 0.15 1.00 0.37 0.01 -0.16 0.28 -0.02 -0.20 0.07 0.23 0.06 0.18 -0.17 0.10 -0.01 -0.20 -0.11 -0.26
Falsification et usages de chèques volés 0.15 0.57 0.49 0.53 -0.31 0.54 -0.74 0.19 0.02 -0.45 -0.39 -0.67 -0.60 -0.36 0.88 0.50 0.33 0.25 0.83 0.55 0.67 0.75 0.77 0.40 -0.20 -0.25 0.02 0.79 0.88 0.84 0.85 -0.19 0.02 0.76 0.88 0.63 0.85 0.79 -0.12 -0.11 0.27 0.04 -0.45 0.09 0.13 -0.47 -0.27 -0.37 -0.14 -0.34 0.32 -0.49 -0.50 0.01 -0.02 -0.38 -0.71 -0.03 -0.09 0.60 -0.18 -0.26 -0.28 0.62 0.64 0.05 0.66 0.74 -0.04 -0.66 0.53 -0.43 -0.73 -0.67 0.49 0.35 -0.38 -0.20 0.12 0.37 0.41 -0.36 -0.57 0.16 -0.04 0.31 0.36 0.37 1.00 -0.38 -0.61 0.85 -0.02 -0.64 0.21 0.51 0.40 0.64 -0.38 0.17 -0.03 -0.51 -0.50 -0.77
Falsification et usages de cartes de crédit 0.17 -0.52 -0.12 -0.28 0.48 -0.29 0.69 0.12 0.19 0.72 0.78 0.72 0.71 0.61 -0.52 -0.38 -0.28 -0.03 -0.47 -0.43 -0.31 -0.38 -0.22 0.13 0.21 0.47 0.18 -0.25 -0.28 -0.46 -0.42 0.65 0.23 -0.47 -0.57 -0.44 -0.48 -0.44 0.18 -0.05 0.15 0.19 0.62 0.45 0.00 0.64 0.64 0.60 0.56 0.35 -0.11 0.64 0.66 0.09 0.23 0.69 0.61 0.17 0.31 -0.45 -0.10 0.48 0.33 -0.34 -0.27 0.32 -0.18 -0.47 -0.11 0.43 -0.46 0.52 0.65 0.64 -0.57 -0.36 0.56 0.46 -0.26 -0.22 0.22 0.30 0.67 -0.21 0.22 0.11 -0.08 0.01 -0.38 1.00 0.81 -0.58 0.06 0.55 -0.17 -0.28 -0.28 -0.48 0.54 0.04 0.11 0.42 0.80 0.63
Escroqueries et abus de confiance 0.05 -0.59 -0.31 -0.36 0.57 -0.40 0.91 0.06 0.16 0.74 0.75 0.86 0.85 0.67 -0.74 -0.42 -0.37 -0.06 -0.65 -0.45 -0.47 -0.63 -0.44 -0.02 0.26 0.42 0.23 -0.44 -0.56 -0.73 -0.66 0.55 0.28 -0.68 -0.79 -0.62 -0.74 -0.69 0.32 0.17 0.04 0.14 0.59 0.41 -0.02 0.74 0.67 0.68 0.54 0.37 -0.23 0.73 0.76 0.09 0.19 0.76 0.82 0.05 0.38 -0.54 0.04 0.42 0.34 -0.55 -0.50 0.18 -0.50 -0.72 -0.08 0.70 -0.59 0.55 0.83 0.83 -0.56 -0.38 0.60 0.51 -0.05 -0.19 0.01 0.52 0.76 -0.07 0.28 0.03 -0.11 -0.16 -0.61 0.81 1.00 -0.66 0.24 0.79 -0.11 -0.39 -0.25 -0.59 0.62 0.10 0.13 0.60 0.84 0.84
Infractions à la législation sur les chèques -0.01 0.62 0.41 0.51 -0.51 0.50 -0.79 0.04 -0.12 -0.68 -0.59 -0.79 -0.74 -0.58 0.86 0.64 0.42 0.32 0.83 0.66 0.63 0.73 0.63 0.23 -0.17 -0.31 -0.09 0.60 0.74 0.75 0.80 -0.48 0.05 0.72 0.87 0.68 0.79 0.75 0.05 -0.05 0.20 -0.03 -0.58 -0.02 0.11 -0.65 -0.50 -0.56 -0.41 -0.34 0.25 -0.66 -0.63 0.06 -0.16 -0.48 -0.72 -0.05 -0.19 0.69 -0.16 -0.38 -0.30 0.56 0.53 -0.04 0.53 0.75 0.16 -0.55 0.60 -0.46 -0.79 -0.67 0.57 0.39 -0.58 -0.41 0.27 0.36 0.23 -0.31 -0.67 0.40 -0.08 0.10 0.37 0.28 0.85 -0.58 -0.66 1.00 0.12 -0.56 0.37 0.59 0.44 0.74 -0.47 0.10 0.08 -0.59 -0.71 -0.83
Travail clandestin -0.21 -0.01 -0.15 0.08 0.11 -0.02 0.24 -0.04 0.02 0.18 0.20 0.21 0.28 0.12 -0.20 -0.01 0.13 0.27 -0.19 0.01 -0.13 -0.34 -0.10 0.08 0.01 -0.14 0.24 -0.07 -0.26 -0.13 -0.18 0.02 0.40 -0.04 -0.18 -0.19 -0.22 -0.28 0.42 0.39 -0.05 -0.02 0.03 0.57 0.18 0.09 0.11 0.15 0.12 0.13 -0.02 0.26 0.17 0.31 0.33 0.51 0.43 -0.21 0.42 0.11 -0.15 -0.09 -0.04 -0.16 -0.23 -0.20 -0.41 -0.29 -0.01 0.52 -0.07 -0.10 0.20 0.39 0.32 0.09 0.07 0.11 0.41 0.31 -0.20 0.62 0.34 0.37 0.61 -0.08 0.38 -0.02 -0.02 0.06 0.24 0.12 1.00 0.48 0.29 0.41 0.19 0.20 0.39 0.58 0.34 0.32 0.07 0.20
Emploi d'étranger sans titre de travail -0.08 -0.54 -0.41 -0.35 0.33 -0.42 0.78 -0.12 -0.03 0.53 0.57 0.69 0.68 0.39 -0.72 -0.29 -0.24 0.04 -0.61 -0.37 -0.47 -0.58 -0.49 -0.19 0.33 0.38 0.08 -0.57 -0.65 -0.69 -0.66 0.29 0.38 -0.64 -0.73 -0.53 -0.72 -0.62 0.50 0.22 0.03 0.03 0.46 0.35 0.04 0.47 0.42 0.45 0.31 0.33 -0.22 0.57 0.57 0.31 0.09 0.65 0.82 0.07 0.27 -0.43 -0.04 0.28 0.32 -0.55 -0.55 0.15 -0.54 -0.63 0.11 0.86 -0.43 0.48 0.71 0.83 -0.42 -0.31 0.35 0.27 -0.02 -0.21 -0.02 0.61 0.72 0.15 0.29 -0.12 -0.13 -0.20 -0.64 0.55 0.79 -0.56 0.48 1.00 0.08 -0.24 -0.23 -0.45 0.57 0.05 0.23 0.52 0.61 0.72
Marchandage - prêt de main d'oeuvre -0.04 0.20 0.07 0.09 -0.43 0.17 -0.22 -0.23 -0.33 -0.39 -0.26 -0.31 -0.32 -0.42 0.25 0.45 0.33 0.23 0.27 0.41 0.19 0.29 0.20 -0.11 0.27 0.12 -0.13 -0.04 0.22 0.14 0.18 -0.40 0.33 0.12 0.20 0.29 0.15 0.28 0.46 0.06 0.34 -0.01 -0.20 0.13 0.11 -0.42 -0.36 -0.42 -0.41 0.06 -0.02 -0.39 -0.15 0.34 -0.31 -0.15 -0.15 0.29 -0.26 0.24 -0.12 -0.11 0.08 0.10 0.10 0.14 0.19 0.32 0.47 0.05 0.33 0.07 -0.26 -0.11 0.08 0.11 -0.47 -0.40 0.09 0.16 0.15 0.10 -0.12 0.56 -0.12 -0.02 0.10 0.07 0.21 -0.17 -0.11 0.37 0.29 0.08 1.00 0.29 0.07 0.38 -0.11 -0.15 0.28 -0.33 -0.27 -0.31
Banqueroutes, abus de biens sociaux et autres délits de société -0.07 0.53 0.24 0.42 -0.24 0.42 -0.44 0.11 0.05 -0.33 -0.22 -0.44 -0.32 -0.29 0.47 0.34 0.36 0.24 0.47 0.37 0.33 0.33 0.40 0.24 -0.29 -0.40 -0.07 0.34 0.38 0.48 0.47 -0.28 0.13 0.47 0.54 0.36 0.46 0.37 0.10 -0.14 -0.05 -0.12 -0.45 0.18 0.19 -0.33 -0.21 -0.25 -0.16 -0.19 0.17 -0.27 -0.43 0.09 0.18 -0.02 -0.37 -0.16 0.09 0.59 -0.15 -0.23 -0.22 0.38 0.35 -0.12 0.22 0.42 0.05 -0.14 0.59 -0.39 -0.45 -0.32 0.64 0.31 -0.23 -0.21 0.25 0.34 -0.00 -0.05 -0.34 0.33 0.21 0.05 0.41 0.23 0.51 -0.28 -0.39 0.59 0.41 -0.24 0.29 1.00 0.40 0.53 -0.08 0.33 0.25 -0.25 -0.48 -0.50
Prix illicittes, publicité fausse et infractions aux règles de la concurrence 0.04 0.34 0.23 0.36 0.02 0.36 -0.27 0.21 0.11 -0.10 -0.12 -0.23 -0.14 -0.02 0.35 0.13 0.16 0.17 0.34 0.23 0.20 0.16 0.32 0.29 -0.28 -0.39 0.16 0.37 0.30 0.32 0.38 -0.07 -0.02 0.23 0.38 0.13 0.31 0.20 -0.08 0.02 -0.11 -0.07 -0.31 0.01 0.07 -0.09 -0.01 0.03 0.01 -0.28 0.08 -0.07 -0.20 -0.06 0.01 -0.07 -0.24 -0.25 0.14 0.25 0.00 -0.20 -0.27 0.36 0.24 -0.20 0.03 0.16 -0.23 -0.17 0.34 -0.42 -0.28 -0.26 0.49 0.10 -0.01 0.05 0.20 0.32 -0.03 0.02 -0.22 0.12 0.05 0.18 0.27 0.06 0.40 -0.28 -0.25 0.44 0.19 -0.23 0.07 0.40 1.00 0.34 0.01 0.31 -0.02 -0.04 -0.21 -0.26
Achats et ventes sans factures 0.04 0.49 0.29 0.34 -0.51 0.45 -0.64 -0.04 -0.17 -0.58 -0.53 -0.65 -0.60 -0.48 0.64 0.44 0.41 0.19 0.58 0.48 0.43 0.52 0.41 0.09 -0.12 -0.23 -0.14 0.42 0.54 0.58 0.61 -0.46 0.01 0.52 0.63 0.58 0.60 0.59 0.14 0.01 0.24 0.07 -0.40 0.08 0.22 -0.58 -0.48 -0.51 -0.43 -0.08 0.23 -0.59 -0.48 0.19 -0.17 -0.36 -0.53 0.16 -0.18 0.53 -0.17 -0.29 -0.22 0.48 0.46 0.01 0.43 0.61 0.25 -0.38 0.58 -0.28 -0.63 -0.52 0.45 0.29 -0.54 -0.38 0.23 0.45 0.15 -0.15 -0.50 0.50 -0.12 0.15 0.36 0.18 0.64 -0.48 -0.59 0.74 0.20 -0.45 0.38 0.53 0.34 1.00 -0.32 0.04 0.24 -0.48 -0.57 -0.69
Infractions à l'exercice d'une profession règlementée 0.06 -0.33 -0.22 -0.20 0.49 -0.17 0.65 0.17 0.20 0.69 0.66 0.67 0.71 0.59 -0.54 -0.35 -0.20 0.02 -0.47 -0.34 -0.35 -0.56 -0.23 0.17 0.09 0.13 0.27 -0.26 -0.42 -0.43 -0.47 0.47 0.25 -0.52 -0.54 -0.55 -0.55 -0.56 0.19 0.15 -0.11 0.07 0.41 0.43 0.02 0.55 0.55 0.61 0.50 0.22 -0.04 0.66 0.55 0.13 0.24 0.69 0.67 -0.12 0.48 -0.36 -0.07 0.29 0.17 -0.29 -0.28 0.01 -0.46 -0.59 -0.24 0.57 -0.31 0.23 0.64 0.65 -0.14 -0.25 0.54 0.47 0.02 0.09 -0.12 0.56 0.63 -0.06 0.30 0.17 -0.06 -0.17 -0.38 0.54 0.62 -0.47 0.39 0.57 -0.11 -0.08 0.01 -0.32 1.00 0.32 0.13 0.57 0.63 0.62
Infractions au droit de l'urbanisme et de la construction -0.13 0.09 0.04 0.30 0.51 0.11 0.17 0.35 0.49 0.42 0.31 0.26 0.39 0.46 -0.07 -0.32 -0.02 0.04 -0.11 -0.13 -0.02 -0.35 0.10 0.39 -0.43 -0.45 0.48 0.32 -0.10 0.04 -0.01 0.39 0.04 0.14 0.00 -0.27 0.01 -0.27 -0.17 0.25 -0.41 -0.07 -0.07 0.38 0.06 0.43 0.45 0.50 0.54 -0.17 0.10 0.51 0.16 -0.19 0.71 0.47 0.23 -0.65 0.72 0.12 -0.00 -0.11 -0.29 -0.02 -0.04 -0.46 -0.39 -0.35 -0.60 0.11 -0.11 -0.45 0.16 0.18 0.52 0.14 0.50 0.48 0.46 0.30 -0.29 0.31 0.17 -0.24 0.70 0.13 0.44 0.10 0.17 0.04 0.10 0.10 0.58 0.05 -0.15 0.33 0.31 0.04 0.32 1.00 -0.05 0.49 0.14 0.22
Fraudes fiscales 0.00 -0.03 -0.06 -0.07 -0.13 -0.01 0.13 -0.07 -0.18 -0.03 0.14 0.07 0.05 -0.11 -0.07 0.22 0.14 0.17 -0.01 0.16 0.07 0.03 -0.06 -0.06 0.35 0.27 0.03 -0.15 -0.00 -0.06 -0.06 -0.08 0.45 -0.11 -0.11 0.02 -0.13 0.01 0.47 0.02 0.30 0.05 0.13 0.39 0.28 -0.05 0.02 -0.09 -0.07 0.27 -0.04 -0.04 0.11 0.37 -0.10 0.23 0.17 0.25 -0.03 -0.04 -0.15 0.11 0.21 -0.05 -0.00 0.23 0.06 0.06 0.33 0.26 0.12 0.31 0.13 0.24 -0.08 -0.07 -0.14 -0.18 -0.03 0.15 0.12 0.34 0.19 0.49 0.09 -0.01 0.10 -0.01 -0.03 0.11 0.13 0.08 0.34 0.23 0.28 0.25 -0.02 0.24 0.13 -0.05 1.00 0.01 0.08 0.03
Autres délits économiques et financiers -0.09 -0.44 -0.28 -0.12 0.78 -0.34 0.76 0.23 0.41 0.79 0.66 0.82 0.83 0.76 -0.69 -0.63 -0.34 -0.08 -0.65 -0.54 -0.46 -0.74 -0.39 0.16 0.01 0.02 0.50 -0.23 -0.62 -0.51 -0.57 0.69 0.10 -0.48 -0.64 -0.71 -0.62 -0.72 -0.06 0.39 -0.32 0.01 0.51 0.31 0.00 0.79 0.72 0.82 0.72 0.05 -0.13 0.86 0.62 -0.11 0.48 0.65 0.76 -0.44 0.62 -0.42 0.11 0.18 -0.00 -0.43 -0.48 -0.25 -0.70 -0.83 -0.64 0.47 -0.58 0.04 0.73 0.67 -0.12 -0.20 0.74 0.68 0.10 0.00 -0.36 0.53 0.68 -0.36 0.57 0.07 -0.05 -0.20 -0.51 0.42 0.60 -0.59 0.32 0.52 -0.33 -0.25 -0.04 -0.48 0.57 0.49 0.01 1.00 0.69 0.82
Autres délits 0.18 -0.60 -0.18 -0.30 0.70 -0.37 0.87 0.20 0.24 0.86 0.84 0.92 0.87 0.79 -0.69 -0.55 -0.38 -0.14 -0.64 -0.54 -0.42 -0.57 -0.35 0.13 0.30 0.49 0.33 -0.26 -0.44 -0.58 -0.56 0.76 0.21 -0.63 -0.74 -0.61 -0.65 -0.59 0.17 0.21 0.10 0.21 0.74 0.45 0.05 0.81 0.80 0.78 0.73 0.36 -0.15 0.81 0.82 0.10 0.23 0.70 0.79 0.06 0.42 -0.62 0.04 0.51 0.33 -0.45 -0.36 0.25 -0.36 -0.68 -0.30 0.51 -0.63 0.56 0.87 0.77 -0.61 -0.39 0.71 0.63 -0.22 -0.12 0.10 0.49 0.82 -0.26 0.28 0.14 -0.15 -0.11 -0.50 0.80 0.84 -0.71 0.07 0.61 -0.27 -0.48 -0.21 -0.57 0.63 0.14 0.08 0.69 1.00 0.85
year -0.04 -0.64 -0.41 -0.39 0.72 -0.51 0.95 0.10 0.23 0.85 0.76 0.96 0.92 0.75 -0.91 -0.64 -0.43 -0.15 -0.84 -0.61 -0.61 -0.85 -0.59 -0.04 0.19 0.26 0.34 -0.50 -0.78 -0.81 -0.85 0.61 0.14 -0.75 -0.92 -0.83 -0.89 -0.88 0.07 0.27 -0.24 -0.00 0.60 0.29 -0.06 0.82 0.71 0.77 0.62 0.25 -0.25 0.87 0.78 -0.04 0.30 0.72 0.91 -0.18 0.45 -0.65 0.20 0.36 0.24 -0.61 -0.59 -0.08 -0.74 -0.94 -0.34 0.68 -0.73 0.39 0.93 0.85 -0.47 -0.37 0.73 0.60 -0.08 -0.19 -0.30 0.59 0.82 -0.29 0.36 -0.04 -0.20 -0.26 -0.77 0.63 0.84 -0.83 0.20 0.72 -0.31 -0.50 -0.26 -0.69 0.62 0.22 0.03 0.82 0.85 1.00

L'analyse de cette matrice de corrélation est assez lourde. Nous pouvons voir de nombreuses corrélations positives et négatives sur différentes variables. Certaines peuvent sembler être liées, par exemple les "Sequestrations" sont très fortement corrélées avec les "Tentatives homicides pour d'autres motifs" ou encore les "Viols sur des majeur(e)s". Tandis que d'autres paraissent surprenantes, "Destructions, cruautés et autres délits envers les animaux" est aussi très fortement corrélé avec les "Violations de domicile".

In [20]:
# Vision globale
plt.matshow(df.corr())
plt.show()

En regardant un point de vue global, nous pouvons facilement constater que des "clusters" de corrélation positive et négative semblent se dégager de cette matrice. En nous y intéressant de plus près, nous pouvons constater qu'une partie de ces cluster varie conjointement et nous pouvons supposer que ces variations peuvent dépendre de périodes temporelles tels que les saisons ou les mois encore.

2.1.3. Vision globale

In [21]:
column_to_analyse = df_all.columns.values

# Enlever le département dans les colones à analyse
# Delete num departement
column_to_analyse = np.delete(column_to_analyse,-3)
# delete month
column_to_analyse = np.delete(column_to_analyse,-1)
# delte year
column_to_sum = np.delete(column_to_analyse,-1)


df_france=df.loc[:,column_to_sum]

df_france["Total Incident"] = df_france[column_to_sum].sum(axis=1)
df_france = df_france.drop(columns=column_to_sum)
df_france.head(5)

fig, ax = plt.subplots(figsize = (10, 6))
sns.lineplot(data=df_france, ax=ax, ci=int, linewidth=1);

Le nombre total d'incident à chuter début 2020. Dans l'ensemble, la description des données de manière gloable est difficile à interpréter. Aussi nous allons nous focaliser sur plusieurs axes clés. Mais avant regardons comment se comportent ces crimes et délits par département.

2.2. Crime et délit par département

Regardons la part des crimes et des délits vis-à-vis de leurs zones géographiques. Pour cela, nous allons consolider notre jeu de données avec les informations correspondantes.

In [22]:
column_to_analyse = df_all.columns.values

# Enlever le département dans les colones à analyse
# Delete num departement
column_to_analyse = np.delete(column_to_analyse,-3)
# delete month
column_to_analyse = np.delete(column_to_analyse,-1)

# Validation du typage dans ce df
df_all[column_to_analyse] = df_all[column_to_analyse].astype(int)
df_all.departement = df_all.departement.astype(str)
In [23]:
df_all['total_incidents'] = df_all[column_to_analyse].sum(axis=1)
df_all.head()
Out[23]:
libellé index Règlements de compte entre malfaireurs Homicides pour voler et à l'occasion de vols Homicides pour d'autres motifs Tentatives d'homicides pour voler et à l'occasion de vols Tentatives homicides pour d'autres motifs Coups et blessures volontaires suivis de mort Autres coups et blessures volontaires criminels ou correctionnels Prises d'otages à l'occasion de vols Prises d'otages dans un autre but Sequestrations ... Achats et ventes sans factures Infractions à l'exercice d'une profession règlementée Infractions au droit de l'urbanisme et de la construction Fraudes fiscales Autres délits économiques et financiers Autres délits departement year month total_incidents
date
2020-05-01 0 0 1 0 0 0 135 0 0 2 ... 0 0 2 0 0 96 01 2020 05 3734
2020-04-01 0 0 0 0 3 0 131 0 0 1 ... 0 1 1 0 0 52 01 2020 04 3159
2020-03-01 0 0 0 0 0 1 107 0 0 2 ... 0 0 3 0 3 46 01 2020 03 3519
2020-02-01 0 0 0 0 0 1 123 1 0 2 ... 0 1 5 1 2 83 01 2020 02 4332
2020-01-01 0 0 0 0 0 0 134 0 0 1 ... 0 0 4 0 1 80 01 2020 01 4226

5 rows × 107 columns

Le jeu de donnée est maintenant utilisable. Regardons une description du nombre de crime et délit commis par département.

In [24]:
df_all.groupby('departement').total_incidents.describe().head()
Out[24]:
count mean std min 25% 50% 75% max
departement
01 293.0 3961.614334 291.538805 2671.0 3796.0 3989.0 4135.0 4820.0
02 293.0 4089.730375 262.179339 3145.0 3957.0 4079.0 4212.0 6465.0
03 293.0 3096.085324 153.718619 2715.0 3003.0 3089.0 3170.0 4177.0
04 293.0 2639.870307 107.498631 2357.0 2572.0 2634.0 2707.0 3079.0
05 293.0 2524.709898 94.368600 2261.0 2456.0 2522.0 2583.0 2834.0
In [25]:
mean = round((df_all.groupby('departement').total_incidents.mean().values).mean(),2)
print("Moyenne : " + str(mean))
print("Moyenne x 3 : " + str(mean*3))
print("Moyenne / 3 : " + str(mean/3))
Moyenne : 4933.76
Moyenne x 3 : 14801.28
Moyenne / 3 : 1644.5866666666668

Depuis 1996, nous pouvons constater qu'en France par département et par mois, il y a en moyenne 4945 incidents.

Les limites supérieures à notre analyse vont être égales à 3 fois plus et 3 fois moins la valeur moyenne. Elles correspondent ainsi à 14 835 (limite haute) et 1 648 (limite basse) d'incidents.

In [26]:
moyenne = round(df_all.groupby('departement').total_incidents.mean(), 2).values
departement = df_all.groupby('departement').total_incidents.mean().keys()

df_mean_departement = pd.DataFrame({'Moyenne':moyenne})
df_mean_departement = df_mean_departement.set_index(departement)

print("Moyenne d'acte criminel/délit par mois par département")

df_mean_departement = df_mean_departement.sort_values(by='Moyenne', ascending=True)
print(df_mean_departement.head())
df_mean_departement = df_mean_departement.sort_values(by='Moyenne', ascending=False)
print(df_mean_departement.head())
Moyenne d'acte criminel/délit par mois par département
             Moyenne
departement         
975          2018.64
986          2023.99
977          2049.57
48           2182.69
23           2255.66
              Moyenne
departement          
75           24377.22
13           16227.19
59           16144.00
93           13394.32
69           12865.32
In [27]:
print("Departement avec nb incidents supérieur à la limite haute : ")
print(df_mean_departement[df_mean_departement['Moyenne'] > (mean*3)])
print("Departement avec nb incidents inférieur à la limite basse : ")
print(df_mean_departement[df_mean_departement['Moyenne'] < (mean/3)].values)

# Nombre d'incidents total en fm sur l'année 2019
year = df_all.groupby('year').total_incidents.sum()
print("\nNombre d'incidents sur l'année 2019 : " + str(year[2019]))

# Nombre d'incidents total par département sur l'année 2019
year = df_all.groupby(['year','departement']).total_incidents.sum()
year[2019].head()
Departement avec nb incidents supérieur à la limite haute : 
              Moyenne
departement          
75           24377.22
13           16227.19
59           16144.00
Departement avec nb incidents inférieur à la limite basse : 
[]

Nombre d'incidents sur l'année 2019 : 6428563
Out[27]:
departement
01    52059
02    50805
03    38668
04    33059
05    30363
Name: total_incidents, dtype: int64

Au vu du nombre d'incidents constaté, nous pouvons supposé que les 3 départements 75, 13 et 59 peuvent être assimilé à des zones plus à risques car avec un nombre d'incidents supérieur à la limite du nombre d'incidents préétabli. Mais pour avoir une vision plus réalisée, regardons le pourcentage d'incident par individu (à savoir par habitant) en fonction des départements.

In [28]:
df_tmp = df_population.merge(year[2019], left_on='Departement', right_on='departement')
df_tmp.head()
Out[28]:
Departement Total Total Homme Total Femme % Population Métropolitaine total_incidents
0 01 656955.0 323345.0 333610.0 0.98 52059
1 02 526050.0 256977.0 269073.0 0.78 50805
2 03 331315.0 158212.0 173103.0 0.49 38668
3 04 165197.0 80612.0 84585.0 0.25 33059
4 05 141756.0 69231.0 72525.0 0.21 30363
In [29]:
df_tmp["% Incident / Personne"] = round(df_tmp["total_incidents"] / df_tmp["Total"] * 100, 2)
df_tmp.head()
Out[29]:
Departement Total Total Homme Total Femme % Population Métropolitaine total_incidents % Incident / Personne
0 01 656955.0 323345.0 333610.0 0.98 52059 7.92
1 02 526050.0 256977.0 269073.0 0.78 50805 9.66
2 03 331315.0 158212.0 173103.0 0.49 38668 11.67
3 04 165197.0 80612.0 84585.0 0.25 33059 20.01
4 05 141756.0 69231.0 72525.0 0.21 30363 21.42
In [30]:
df_tmp = df_tmp.sort_values(by='% Incident / Personne', ascending=True)
df_tmp.head(10)
Out[30]:
Departement Total Total Homme Total Femme % Population Métropolitaine total_incidents % Incident / Personne
35 35 1082073.0 528036.0 554037.0 1.61 68489 6.33
67 67 1132607.0 549793.0 582814.0 1.69 74779 6.60
57 57 1035866.0 506327.0 529539.0 1.54 68927 6.65
62 62 1452778.0 704417.0 748361.0 2.17 98796 6.80
29 29 906554.0 440651.0 465903.0 1.35 61770 6.81
49 49 815881.0 397709.0 418172.0 1.22 56068 6.87
85 85 683187.0 332346.0 350841.0 1.02 48066 7.04
56 56 755566.0 365360.0 390206.0 1.13 53620 7.10
91 91 1319401.0 645457.0 673944.0 1.97 95245 7.22
78 78 1448625.0 702875.0 745750.0 2.16 105888 7.31
In [31]:
df_tmp = df_tmp.sort_values(by='% Incident / Personne', ascending=False)
df_tmp.head(10)
Out[31]:
Departement Total Total Homme Total Femme % Population Métropolitaine total_incidents % Incident / Personne
48 48 76286.0 37808.0 38478.0 0.11 26731 35.04
23 23 116270.0 56492.0 59778.0 0.17 28380 24.41
90 90 140145.0 69302.0 70843.0 0.21 30430 21.71
4 05 141756.0 69231.0 72525.0 0.21 30363 21.42
8 09 152398.0 74721.0 77677.0 0.23 30924 20.29
14 15 142811.0 69824.0 72987.0 0.21 28781 20.15
3 04 165197.0 80612.0 84585.0 0.25 33059 20.01
19 2A 162421.0 78523.0 83898.0 0.24 31262 19.25
52 52 169250.0 82702.0 86548.0 0.25 32243 19.05
46 46 173166.0 83828.0 89338.0 0.26 30832 17.80

En réalisant ces quelques transformations, nous disposons maintenant du taux en pourcentage théorique du nombre d'incidents par personne en fonction des départements. Ce pourcentage permet de visualiser en fonction du nombre de personnes les départements les plus enclins à être source d'incidents. Toutefois, ces chiffres ne prennent pas en compte des cas réalistes où par exemple un individu serait à l'origine de plusieurs incidents.

2.3. Analyse focalisée / Focalisation analysis

Afin de faciliter l'analyse de ce jeu de donnée, définissons plusieurs pistes d'actes criminels dans notre évaluation. Nous allons étudier les cambriolages, les homicides et les vols.

2.3.1. Cambriolage / Burglary

Commençons par l'axe cambriolage. Reprenons donc la partie description élémentaire précédemment vue.

In [32]:
# Crimes and mesdemeanours concerning burglary
cambriolage_columns = df.filter(regex=(".*[Cc]ambriolage?s.*")).columns.values
round(df[cambriolage_columns].describe(), 2)
Out[32]:
libellé columns Cambriolages de locaux d'habitations principales Cambriolages de résidences secondaires Cambriolages de locaux industriels, commerciaux ou financiers Cambriolages d'autres lieux
count 293.00 293.00 293.00 293.00
mean 15860.97 1663.19 6735.78 6128.30
std 2852.83 439.77 1487.64 1402.09
min 4601.00 953.00 4333.00 2828.00
25% 13961.00 1325.00 5536.00 4978.00
50% 15615.00 1615.00 6336.00 5768.00
75% 17193.00 1936.00 7672.00 7283.00
max 25024.00 4076.00 12615.00 9583.00

Pour que cela soit plus représentatif, visualisation le boxplot associé.

In [33]:
fig, ax = plt.subplots(figsize = (10, 6))
sns.boxplot(x="libellé columns", y="value", data=pd.melt(df[cambriolage_columns]))

ax.set_xticklabels(ax.get_xticklabels(), rotation=45, horizontalalignment='right');

Il est clair que les cambriolages des résidences principales occupent la major partie des cambriolages en France.

In [34]:
fig, ax = plt.subplots(figsize = (10, 6))
sns.lineplot(data=df.loc[:,cambriolage_columns], ax=ax, ci=int, linewidth=1);

Une tendance semble émerger depuis 2012 pour les cambriolages d'habitations principales. Aussi réduisons la période à partir de cette année.

In [35]:
fig, ax = plt.subplots(figsize = (10, 6))
sns.lineplot(data=df.loc[:'2012-01-01',cambriolage_columns], ax=ax, linewidth=1);

La tendance est bien confirmée. Maintenant, regardons quand le pic de cambriolage des résidences principales se produit. Comparons aussi les cambriolages de l'année 2019 avec la moyenne des cambriolages depuis 1996. Par an, combien avons nous en moyenne de cambriolage ?

In [36]:
print(round(df[cambriolage_columns].mean(),0))

fig, ax = plt.subplots(figsize = (10, 6))
sns.lineplot(data=df.loc['2020-01-01':'2018-01-01',cambriolage_columns], ax=ax, linewidth=2)

for mean in df[cambriolage_columns].mean().values:
    ax.axhline(mean, ls='-', color='black', linewidth=1)
libellé columns
Cambriolages de locaux d'habitations principales                 15861.0
Cambriolages de résidences secondaires                            1663.0
Cambriolages de locaux industriels, commerciaux ou financiers     6736.0
Cambriolages d'autres lieux                                       6128.0
dtype: float64

Nous pouvons constater que seulement les résidences principales sont concernées par une augmentation du nombre de cambriolages vis-à-vis de leur moyenne depuis 1996. De plus les pics de cambriolages ne concernent visuellement que les habitations principales. Ces pics semblent être focalisé sur les mois de novembre décembre, soit peu de temps avec Noël. Supposons que les autres types de cambriolages soient négligeables, regroupons donc pour continuer notre analyse.

In [37]:
df_cambriolage=df.loc[:,cambriolage_columns]
other_cambriolage_columns = [
    'Cambriolages de résidences secondaires',
    'Cambriolages de locaux industriels, commerciaux ou financiers',
    "Cambriolages d'autres lieux"
]
df_cambriolage["Autre"] = df_cambriolage[cambriolage_columns].sum(axis=1)
df_cambriolage = df_cambriolage.drop(columns=other_cambriolage_columns)
print(df_cambriolage.head(5))

fig, ax = plt.subplots(figsize = (8, 5))
sns.boxplot(x="libellé columns", y="value", data=pd.melt(df_cambriolage));
libellé columns  Cambriolages de locaux d'habitations principales  Autre
index                                                                   
2020-05-01                                                   9536  20667
2020-04-01                                                   4601  12717
2020-03-01                                                  10017  18922
2020-02-01                                                  18204  29847
2020-01-01                                                  20682  33197

En les regroupant, nous pouvons constater que les cambriolages de lieux n'étant pas des habitations principales représentent une part plus significative du nombre de cambriolages. Intéressons-nous maintenant au graphique temporel associé.

In [38]:
fig, ax = plt.subplots(figsize = (10, 6))
sns.lineplot(data=df_cambriolage, ax=ax, ci=int, linewidth=1);

En les visualisant, nous pouvons constater que la tendance remarquée sur les pics de cambriolages sur les résidences principales est aussi représentée pour les cambriolages d'autres établissements. Nous pouvons en déduire qu'il y a une relation de corrélation entre depuis 2012 entre ces deux variables. Toutefois, il nous est impossible pour l'instant d'en déduire s'il s'agit d'une corrélation hasardeuse ou d'une relation de causalité.

Est-ce que les cambriolages sont représentés dans le département possédant le plus d'incidents ?

Cette question peut être répondue de deux manières. Soit par l'intermédiaire de nombre d'incidents vis-à-vis des départements. Ou alors par le taux d'incident par personne par département. Ces deux approches se valent aussi reprenons les chiffres précédemment calculer.

Pour rappel, le département avec le plus d'incidents est le 75 avec une moyenne de 24 465 incidents par mois. Et le département 48 est celui avec le taux d'incident par personne le plus élevé, à savoir 35.04 % incident par personne.

In [39]:
# Restriction sur le département 75
df_cambriolage_2 = df_all.loc[df_all.departement == '75',cambriolage_columns]
df_cambriolage_2["Autre"] = df_cambriolage_2[cambriolage_columns].sum(axis=1)
df_cambriolage_2 = df_cambriolage_2.drop(columns=other_cambriolage_columns)
df_cambriolage_2.head()
Out[39]:
libellé index Cambriolages de locaux d'habitations principales Autre
date
2020-05-01 467 1007
2020-04-01 153 509
2020-03-01 631 1095
2020-02-01 1225 1872
2020-01-01 1349 1999
In [40]:
fig, ax = plt.subplots(figsize = (10, 6))
sns.lineplot(data=df_all.loc[df_all.departement == '75',cambriolage_columns], ax=ax, ci=int, linewidth=1);

En nous intéressant à ce graphique nous pouvons constater que le nombre de cambriolages dans ce département suit une descendante depuis 1996. Cependant depuis 2009-2010, cette tendance c'est inversé en ayant un pic courant 2013. Focalisons nous maintenant le département avec le taux d'incident le plus élevé.

In [41]:
df_cambriolage_3 = df_all.loc[df_all.departement == '48',cambriolage_columns]
df_cambriolage_3["Autre"] = df_cambriolage_3[cambriolage_columns].sum(axis=1)
df_cambriolage_3 = df_cambriolage_3.drop(columns=other_cambriolage_columns)
df_cambriolage_3.head()
Out[41]:
libellé index Cambriolages de locaux d'habitations principales Autre
date
2020-05-01 2 14
2020-04-01 0 5
2020-03-01 3 12
2020-02-01 4 18
2020-01-01 4 25
In [42]:
fig, ax = plt.subplots(figsize = (10, 6))
sns.lineplot(data=df_all.loc[df_all.departement == '49',cambriolage_columns], ax=ax, ci=int, linewidth=1);

Malgré un taux relativement élevé d'incident par personne, ce département ne possède pas un grand nombre d'observations concernant les cambriolages. Pour des raisons des granularités, il n'est pas intéressant d'étudier par comparaison les départements 48 et 75. Toutefois, regardons la part de cambriolage par personne et par département.

In [43]:
df_cambriolage = df_all.loc[:,cambriolage_columns]
df_cambriolage["Total cambriolage"] = df_cambriolage.loc[:,cambriolage_columns].sum(axis=1)
df_cambriolage["departement"] = df_all.loc[:,'departement']
df_cambriolage["year"] = df_all.loc[:,'year']

# df_cambriolage.head()

mean_cambriolage = round(df_cambriolage.groupby('departement')["Total cambriolage"].mean(), 2).values

df_cambriolage_mean_departement = pd.DataFrame({'Moyenne':mean_cambriolage})
df_cambriolage_mean_departement = df_cambriolage_mean_departement.set_index(departement)

print("Nombre de cambriolage moyen par département par mois : " + str())

df_cambriolage_mean_departement = df_cambriolage_mean_departement.sort_values(by='Moyenne', ascending=True)
print(df_cambriolage_mean_departement.head())
df_cambriolage_mean_departement = df_cambriolage_mean_departement.sort_values(by='Moyenne', ascending=False)
print(df_cambriolage_mean_departement.head())
Nombre de cambriolage moyen par département par mois : 
             Moyenne
departement         
975             0.20
986             1.88
977             2.02
48             17.03
15             27.50
             Moyenne
departement         
75           1632.92
13           1468.86
59           1377.85
69           1251.73
06            890.90
In [44]:
df_cambriolage_year = df_cambriolage.groupby(['year','departement'])["Total cambriolage"].sum()
df_cambriolage_personne = df_population.merge(df_cambriolage_year[2019], left_on='Departement', right_on='departement')
df_cambriolage_personne["% Cambriolage / Personne"] = round(df_cambriolage_personne["Total cambriolage"] / df_cambriolage_personne["Total"] * 100, 2)
df_cambriolage_personne.head()
Out[44]:
Departement Total Total Homme Total Femme % Population Métropolitaine Total cambriolage % Cambriolage / Personne
0 01 656955.0 323345.0 333610.0 0.98 4420 0.67
1 02 526050.0 256977.0 269073.0 0.78 3228 0.61
2 03 331315.0 158212.0 173103.0 0.49 1669 0.50
3 04 165197.0 80612.0 84585.0 0.25 886 0.54
4 05 141756.0 69231.0 72525.0 0.21 434 0.31
In [45]:
df_cambriolage_personne = df_cambriolage_personne.sort_values(by='% Cambriolage / Personne', ascending=True)
print("Les plus faibles taux de % de cambriolage / personne")
df_cambriolage_personne.head()
Les plus faibles taux de % de cambriolage / personne
Out[45]:
Departement Total Total Homme Total Femme % Population Métropolitaine Total cambriolage % Cambriolage / Personne
20 2B 182258.0 88411.0 93847.0 0.27 260 0.14
48 48 76286.0 37808.0 38478.0 0.11 183 0.24
50 50 490669.0 239023.0 251646.0 0.73 1164 0.24
19 2A 162421.0 78523.0 83898.0 0.24 390 0.24
53 53 305365.0 150300.0 155065.0 0.46 863 0.28
In [46]:
df_cambriolage_personne = df_cambriolage_personne.sort_values(by='% Cambriolage / Personne', ascending=False)
print("Les plus forts taux de % de cambriolage / personne")
df_cambriolage_personne.head()
Les plus forts taux de % de cambriolage / personne
Out[46]:
Departement Total Total Homme Total Femme % Population Métropolitaine Total cambriolage % Cambriolage / Personne
69 69 1876051.0 901603.0 974448.0 2.80 17662 0.94
12 13 2034469.0 972786.0 1061683.0 3.03 17727 0.87
75 75 2148271.0 1008617.0 1139654.0 3.20 18326 0.85
44 44 1437137.0 697201.0 739936.0 2.14 11297 0.79
33 33 1633440.0 785304.0 848136.0 2.44 12909 0.79
In [47]:
print("Moyenne d'acte criminel/délit par mois par département")
Moyenne d'acte criminel/délit par mois par département

Pour résumer l'analyse des cambriolages en France :

  • Les cambriolages touchent par mois entre 0,15% et 1% de la population française (dépendant de la région)
  • Entre 1996 et 2008, le nombre de cambriolages en France suivait une tendance de diminution,
  • Depuis 2008, la tendance est repartie à la hausse,
  • Depuis 2012, les cambriolages manifestent des pics périodiques à l'approche de la période de Noël (hivernale).
  • Le département le plus touché par les cambriolages est le 69, et le moins touché est le 2B

2.3.2. Homicides / murders

Continuons avec l'axe homicide.

In [48]:
# Crimes and mesdemeanours concerning murders
homicides_columns = df.filter(regex=(".*[Hh]omicide?s.*")).columns.values

fig, ax = plt.subplots(figsize = (10, 6))
sns.boxplot(x="libellé columns", y="value", data=pd.melt(df[homicides_columns]))
ax.set_xticklabels(ax.get_xticklabels(), rotation=45, horizontalalignment='right')

round(df[homicides_columns].describe(), 2)
Out[48]:
libellé columns Homicides pour voler et à l'occasion de vols Homicides pour d'autres motifs Tentatives d'homicides pour voler et à l'occasion de vols Tentatives homicides pour d'autres motifs Homicides commis contre enfants de moins de 15 ans
count 293.00 293.00 293.00 293.00 293.00
mean 3.68 57.30 6.96 110.59 5.64
std 3.00 15.71 4.34 45.28 3.14
min 0.00 29.00 0.00 50.00 0.00
25% 2.00 47.00 4.00 82.00 3.00
50% 3.00 55.00 6.00 93.00 5.00
75% 5.00 65.00 9.00 124.00 7.00
max 16.00 170.00 26.00 264.00 20.00

Cet axe regroupe deux aspects. D'un côté les homicides et de l'autre les tentatives d'homicide. On remarque que l'immense majorité de ces cas représente des homicides et tentatives d'homicide pour des raisons autres que "pour voler", "à l'occasion de vols" ou "contre des enfants de moins de 15 ans".

In [49]:
fig, ax = plt.subplots(figsize = (10, 6))
sns.lineplot(data=df[homicides_columns], ax=ax, ci=int, linewidth=1);

Cette visualisation est difficile à interpréter, pour plus de simplicité nous allons décomposer en homicide et tentative d'homicides. Cependant, nous pouvons constater une tendance émergente pour les tentatives d'homicide "d'autres motifs" depuis 2010. De plus, deux pics d'homicides sont représentés autour de l'année 2016.

In [50]:
# Homicides
only_homicides_columns = df.filter(regex=(".*Homicides.*")).columns.values

fig, ax = plt.subplots(figsize = (10, 6))
sns.lineplot(data=df[only_homicides_columns], ax=ax, ci=int, linewidth=1)

# Tentatives
only_tentative_homicides_columns = df.filter(regex=(".*homicides.*")).columns.values

fig, ax = plt.subplots(figsize = (10, 6))
sns.lineplot(data=df[only_tentative_homicides_columns], ax=ax, ci=int, linewidth=1)

# Zoom
fig, ax = plt.subplots(figsize = (10, 6))
sns.lineplot(data=df.loc['2016':'2014',homicides_columns], ax=ax, linewidth=1);

La tendance et ces pics sont plus clairs maintenant. En affichant la vue entre l'année 2014 et 2016, nous pouvons observer les deux pics d'homicides précédemment évoquées en fin d'année 2015 et en été 2016. Ces pics correspondent aux deux périodes d'attaques terroristes en France. La première à Paris sur plusieurs sites (dont le bataclan) et la seconde à Nice sur la promenade des Anglais. Ce deuxième justifie aussi le pic de tentatives d'homicide dû au grand nombre de blessés par cette seconde attaque.

Le '75' est le département avec le plus haut taux de cambriolage. Quand est-il des homicides ?

In [51]:
# Restriction sur le département 75
df_homicide = df_all.loc[df_all.departement == '75',homicides_columns]
df_homicide["All Homicide"] = df_homicide[only_homicides_columns].sum(axis=1)
df_homicide["All Tenta Homicide"] = df_homicide[only_tentative_homicides_columns].sum(axis=1)

df_homicide = df_homicide.drop(columns=homicides_columns)

fig, ax = plt.subplots(figsize = (10, 6))
sns.lineplot(data=df_all.loc[df_all.departement == '75',homicides_columns], ax=ax, ci=int, linewidth=1)


fig, ax = plt.subplots(figsize = (10, 6))
sns.lineplot(data=df_homicide, ax=ax, ci=int, linewidth=1)

df_homicide.head()
Out[51]:
libellé index All Homicide All Tenta Homicide
date
2020-05-01 0 15
2020-04-01 1 12
2020-03-01 1 16
2020-02-01 2 13
2020-01-01 4 16

Le département 75 a fait partie zones d'attaque terroriste, d'où la présence du pic fin 2015. En comparaison de la France, ce département est l'une des principales zones où l'on peut constater des homicides et tentatives d'homicide. De plus, ce département présente une hausse du nombre de tentatives d'homicide.

In [52]:
# Restriction sur le département 48
df_homicide = df_all.loc[df_all.departement == '48',homicides_columns]
df_homicide["Autre"] = df_homicide[homicides_columns].sum(axis=1)
df_homicide = df_homicide.drop(columns=homicides_columns)

fig, ax = plt.subplots(figsize = (10, 6))
sns.lineplot(data=df_all.loc[df_all.departement == '48',homicides_columns], ax=ax, ci=int, linewidth=1);

Dans le département 48, nous constatons une absence totale d'homicide et un très faible taux du nombre de tentatives d'homicide. Pourraient être intéressants de regarder les zones les plus soumis aux homicides et tentatives d'homicide.

Pour résumer l'axe homicide :

  • La France a vu son taux d'homicide diminuer de manière globale. Cependant certains évènements (attaques terroristes) ont causé une augmentation du nombre d'homicide et de tentatives d'homicide.
  • Depuis 2010, la France connait une tendance progressive du nombre de tentatives d'homicide qui a pratiquement triplé.

2.3.3. Vols

Passons maintenant à l'axe vols.

In [53]:
# Crimes and mesdemeanours concerning thief
voles_columns = df.filter(regex=(".*[Vv]ol?[es].*")).columns.values

fig, ax = plt.subplots(figsize = (10, 6))
sns.boxplot(x="libellé columns", y="value", data=pd.melt(df[voles_columns]))
ax.set_xticklabels(ax.get_xticklabels(), rotation=45, horizontalalignment='right');

L'analyse de l'axe vols est complexe. Pour permettre de la rendre plus pertinente, nous allons la décomposer en sous-axes.

La grande quantité d'information rend difficile l'exploitation simple de ce dernier axe. Aussi nous allons le subdivisé en fonction de critère pour avoir 5 sous catégories :

  • vols à main
  • vols spécifiques
  • vols violents
  • vols 'simple'
  • vols véhicule
2.3.3.1. Vols à main
In [54]:
vols_with_hands_column = df.filter(regex=(".*Vols à main.*")).columns.values

fig, ax = plt.subplots(figsize = (10, 6))
sns.boxplot(x="libellé columns", y="value", data=pd.melt(df[vols_with_hands_column]))
ax.set_xticklabels(ax.get_xticklabels(), rotation=45, horizontalalignment='right');

fig, ax = plt.subplots(figsize = (10, 6))
sns.lineplot(data=df[vols_with_hands_column], ax=ax, ci=int, linewidth=1);

fig, ax = plt.subplots(figsize = (10, 6))
sns.lineplot(data=df.loc['2019':'2017',vols_with_hands_column], ax=ax, ci=int, linewidth=1);

Il apparait très clairement une tendance périodique sur les vols à main armée contre des établissements industriels ou commerciaux. Celle-ci semble correspondre à l'arrivée de la période de Noël. Les vols à main armée contre des établissements industriels ou commerciaux suivent aussi une tendance qui tend à diminuer depuis 2010. Sur cet axe, les vols à main armée contre des établissements industriels ou commerciaux sont les plus importants, les autres étaient moins importants, aussi nous allons les regrouper.

In [55]:
df_vols_with_hands = df.loc[:,vols_with_hands_column]
other_steal_columns = [
    'Vols à main armée contre des établissements financiers',
    'Vols à main armée contre des entreprises de transports de fonds',
    'Vols à main armée contre des particuliers à leur domicile'
]

df_vols_with_hands["Autre"] = df_vols_with_hands[other_steal_columns].sum(axis=1)
df_vols_with_hands = df_vols_with_hands.drop(columns=other_steal_columns)

fig, ax = plt.subplots(figsize = (8, 5))
sns.boxplot(x="libellé columns", y="value", data=pd.melt(df_vols_with_hands));

fig, ax = plt.subplots(figsize = (10, 6))
sns.lineplot(data=df_vols_with_hands, ax=ax, ci=int, linewidth=1);

df_vols_with_hands.head()
Out[55]:
libellé columns Vols à main armée contre des éts industriels ou commerciaux Autre
index
2020-05-01 30 19
2020-04-01 23 25
2020-03-01 58 27
2020-02-01 84 43
2020-01-01 91 48

Cette représentation plus simple nous confirme qu'il apparait ici très clairement qu'en France les vols à main armée tendent à diminuer.

2.3.3.2. Vols spécifiques
In [56]:
vols_specific_column = ['Vols à la tire', "Vols à l'étalage", 'Vols à la roulotte']

fig, ax = plt.subplots(figsize = (10, 6))
sns.boxplot(x="libellé columns", y="value", data=pd.melt(df[vols_specific_column]))
ax.set_xticklabels(ax.get_xticklabels(), rotation=45, horizontalalignment='right');

fig, ax = plt.subplots(figsize = (10, 6))
sns.lineplot(data=df[vols_specific_column], ax=ax, ci=int, linewidth=1);

fig, ax = plt.subplots(figsize = (10, 6))
sns.lineplot(data=df.loc['2019':'2016',vols_specific_column], ax=ax, ci=int, linewidth=1);

Les vols dits spécifiques représentent la plus grande quantité de cas enregistrés en France. Ici nous allons rester assez simpliste. Il existe une tendance décroissante du nombre de vols à la roulotte, à l'inverse les vols à la tire tendent à augmenter depuis 2012.

2.3.3.3. Vols violents
In [57]:
vols_violents_column = df.filter(regex=(".*Vols violents.*")).columns.values

fig, ax = plt.subplots(figsize = (10, 6))
sns.boxplot(x="libellé columns", y="value", data=pd.melt(df[vols_violents_column]))
ax.set_xticklabels(ax.get_xticklabels(), rotation=45, horizontalalignment='right');

fig, ax = plt.subplots(figsize = (10, 6))
sns.lineplot(data=df[vols_violents_column], ax=ax, ci=int, linewidth=1);

fig, ax = plt.subplots(figsize = (10, 6))
sns.lineplot(data=df.loc['2019':'2018',vols_violents_column], ax=ax, ci=int, linewidth=1);
In [58]:
vols_violents_column
Out[58]:
array(['Vols violents sans arme contre des établissements financiers,commerciaux ou industriels',
       'Vols violents sans arme contre des particuliers à leur domicile',
       'Vols violents sans arme contre des femmes sur voie publique ou autre lieu public',
       "Vols violents sans arme contre d'autres victimes"], dtype=object)

Ce sous-axe peut être séparé en deux ensembles. D'un côté les "Vols violents sans arme contre des femmes sur voie publique ou autre lieu public" avec les "Vols violents sans arme contre d'autres victimes" qui représenter la majorité des données de cette analyse et de l'autre les "Vols violents sans arme contre des établissements financiers, commerciaux ou industriels" avec les "Vols violents sans arme contre des particuliers à leur domicile" qui sont pratiquement inexistant en comparaison.

2.3.3.4. Vols simple
In [59]:
vols_simple_column = df.filter(regex=(".*simple.*")).columns.values

fig, ax = plt.subplots(figsize = (10, 6))
sns.boxplot(x="libellé columns", y="value", data=pd.melt(df[vols_simple_column]))
ax.set_xticklabels(ax.get_xticklabels(), rotation=45, horizontalalignment='right');

fig, ax = plt.subplots(figsize = (10, 6))
sns.lineplot(data=df[vols_simple_column], ax=ax, ci=int, linewidth=1);

fig, ax = plt.subplots(figsize = (10, 6))
sns.lineplot(data=df.loc['2019':'2014',vols_simple_column], ax=ax, ci=int, linewidth=1);

Nous pouvons remarquer que la quantité de données liées aux activités 'Vols simples sur chantier', 'Vols simples sur exploitations agricoles' et 'Autres vols simples contre des établissements publics ou privés' sont assez restreintes en comparaison des 'Autres vols simples contre des particuliers dans deslocaux privés' et des 'Autres vols simples contre des particuliers dans des locaux ou lieux publics'. Aussi nous allons les regrouper pour plus de simpliciter.

In [60]:
vols_simple_column
Out[60]:
array(['Vols simples sur chantier',
       'Vols simples sur exploitations agricoles',
       'Autres vols simples contre des établissements publics ou privés',
       'Autres vols simples contre des particuliers dans deslocaux privés',
       'Autres vols simples contre des particuliers dans des locaux ou lieux publics'],
      dtype=object)
In [61]:
df_vols_simple_column = df.loc[:,vols_simple_column]
        
other_steal_2_columns = [
    'Vols simples sur chantier',
    'Vols simples sur exploitations agricoles',
    'Autres vols simples contre des établissements publics ou privés'
]

df_vols_simple_column["Autre"] = df_vols_simple_column[other_steal_2_columns].sum(axis=1)
df_vols_simple_column = df_vols_simple_column.drop(columns=other_steal_2_columns)

fig, ax = plt.subplots(figsize = (8, 5))
sns.boxplot(x="libellé columns", y="value", data=pd.melt(df_vols_simple_column));
ax.set_xticklabels(ax.get_xticklabels(), rotation=45, horizontalalignment='right');

fig, ax = plt.subplots(figsize = (10, 6))
sns.lineplot(data=df_vols_simple_column, ax=ax, ci=int, linewidth=1);

Ce regroupement nous permet de visualiser des périodicités sur l'ensemble des actes de ce sous-axe.

2.3.3.5. Vols véhicule
In [62]:
vols_vehicules_column = df.filter(regex=("Vols.*véhicule.*")).columns.values

fig, ax = plt.subplots(figsize = (10, 6))
sns.boxplot(x="libellé columns", y="value", data=pd.melt(df[vols_vehicules_column]))
ax.set_xticklabels(ax.get_xticklabels(), rotation=45, horizontalalignment='right');

fig, ax = plt.subplots(figsize = (10, 6))
sns.lineplot(data=df[vols_vehicules_column], ax=ax, ci=int, linewidth=1);

fig, ax = plt.subplots(figsize = (10, 6))
sns.lineplot(data=df.loc['2019':'2018',vols_vehicules_column], ax=ax, ci=int, linewidth=1);

Ce dernier sous axe montre que le nombre de vols de véhicule motorisés à 2 roues et de transport avec frêt tend à diminuer.

3. Machine Learning

Reprenons le jeu de donnée initial. Nous allons opérer en trois temps :

  • Réalisation d’un premier modèle « simpliste » avec deux modèles sur un cas d’usage
  • Mise en place d’un processus de prédiction « industriel » sur de multiples variables
  • Évaluation des résultats des modèles d’apprentissage

3.1. Cas d’étude : prédiction des cambriolages en France par département et par mois

Commençons par importer les librairies nécessaires à ce premier point

In [63]:
import numpy as np
import pandas as pd

from sklearn.preprocessing import OneHotEncoder
from sklearn.model_selection import train_test_split

from sklearn.metrics import accuracy_score, mean_squared_error, mean_squared_log_error

from sklearn.linear_model import LinearRegression
from sklearn.tree import DecisionTreeRegressor

Ensuite, définissons les variables nécessaires à notre cas d’étude. Elles vont permettre de préparer les données d’entré des différents modèles et de réaliser par la suite un train test split. Nous allons aussi réaliser une étape de prétransformation (ici une seule de catégorisation). L’objectif par cette étape est de considérer toutes les valeurs possibles des différentes dimensions d’input comme étant elle-même des dimensions.

In [64]:
########################################
# Define input & array columns
input_columns = ['departement','year','month']
array_input_columns = np.asarray(input_columns)

########################################
# Case to study
cambriolage_columns = df.filter(regex=(".*[Cc]ambriolage?s.*")).columns.values
champs_to_predict = "Total_Cambriolage"
column_to_use = np.concatenate((cambriolage_columns, array_input_columns), axis=None)

##################################################
# Préparation des données d'input
df_ml = df_all.loc[:,column_to_use]
df_ml[champs_to_predict] = df_ml[cambriolage_columns].sum(axis=1)
df_ml = df_ml.drop(columns=cambriolage_columns)
df_ml = df_ml['2018':'2019']
df_ml = df_ml.reset_index()

values_to_drop = [champs_to_predict,'date']
X = df_ml.drop(labels = values_to_drop, axis=1)
y = df_ml.loc[:,champs_to_predict]

##################################################
#  No pipeline, only pre_processor categorical
enc = OneHotEncoder()
enc.fit(X)
X = enc.transform(X).toarray()

#########################
# Train & Test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
y_test = pd.Series(y_test, dtype='float')

Les données sont prêtes à être exploitées par des modèles d’apprentissage. Dès l’obtention des prédictions, nous pourrons comparer les résultats sur ce modèle d’apprentissage. Pour calculer évaluer l’impact de se modèle, nous allons calculer deux variables : le RMSE et le pourcentage d’erreur moyen relatif aux données réelles. Pour ces deux mesures, l’objectif est d’avoir la plus petite valeur possible.

In [65]:
##################################################
# Apprentissage
cart_ml = DecisionTreeRegressor()
reg_ml = LinearRegression()

cart_ml.fit(X_train, y_train)
reg_ml.fit(X_train, y_train)

#########################
# prediction
y_test_pred_1 = cart_ml.predict(X_test)
y_test_pred_2 = reg_ml.predict(X_test)

#########################
# Output Test
X_test = enc.inverse_transform(X_test)

# DTR
df_ml_res_test_1 = pd.DataFrame(
    data = X_test,
    columns = input_columns
)
df_ml_res_test_1["Valeur_Reel"] = y_test.values
df_ml_res_test_1["Valeur_Predict"] = y_test_pred_1
df_ml_res_test_1["Difference_abs"] = abs(df_ml_res_test_1["Valeur_Reel"]-df_ml_res_test_1["Valeur_Predict"])
df_ml_res_test_1["%_Error"] = df_ml_res_test_1["Difference_abs"]/df_ml_res_test_1["Valeur_Reel"]

# LR
df_ml_res_test_2 = pd.DataFrame(
    data = X_test,
    columns = input_columns
)
df_ml_res_test_2["Valeur_Reel"] = y_test.values
df_ml_res_test_2["Valeur_Predict"] = y_test_pred_2
df_ml_res_test_2["Difference_abs"] = abs(df_ml_res_test_2["Valeur_Reel"]-df_ml_res_test_2["Valeur_Predict"])
df_ml_res_test_2["%_Error"] = df_ml_res_test_2["Difference_abs"]/df_ml_res_test_2["Valeur_Reel"]

#########################
# Résultats
df_moy_1 = df_ml_res_test_1[df_ml_res_test_1["Valeur_Reel"] != 0]
Err_Moy_Test_1 = round(df_moy_1["%_Error"].mean(),3)*100

df_moy_2 = df_ml_res_test_2[df_ml_res_test_2["Valeur_Reel"] != 0]
Err_Moy_Test_2 = round(df_moy_2["%_Error"].mean(),3)*100

RMSE_test_1 = np.sqrt(mean_squared_error(y_test, y_test_pred_1))
RMSE_test_2 = np.sqrt(mean_squared_error(y_test, y_test_pred_2))

#########################
# Affichage

print("RMSE test 1 : " + str(RMSE_test_1))
print("% Err Moy effectif test 1 : " + str(Err_Moy_Test_1) + " %")
print("RMSE test 2 : " + str(RMSE_test_2))
print("% Err Moy effectif test 2 : " + str(Err_Moy_Test_2) + " %")
RMSE test 1 : 61.0731631578581
% Err Moy effectif test 1 : 18.6 %
RMSE test 2 : 57.9396550633558
% Err Moy effectif test 2 : 47.9 %

En regardant ces résultats, nous pouvons tout de suite distinguer une grande disparité entre le RMSE et le pourcentage d’erreur moyen relatif. Si nous nous focalisons sur le RMSE, nous pouvons supposer que le test 2 est plus performant. À contrario, en se focalisant sur le pourcentage d’erreurs moyen effectif, ce serait le test 1.

En effet, si les deux modèles étaient relativement égaux (en termes de performance et de variation), les deux RMSE et les pourcentages d’erreurs moyennes effectifs aurait été proches l’un de l’autre. Or, ici le pourcentage d’erreurs moyen effectif (que l’on pourrait nommer l’erreur « réel ») est bien inférieur pour le premier test.

Cet aspect est totalement compréhensible. En effet, les modèles disposent en entrée d’une grande variété de valeurs (et par conséquent possiblement d’échelle). L’objectif est de minimiser l’erreur globale indépendamment des résultats. Pour pouvoir tenir compte au même poids des différences d’échelle, la mesure RMSE n’est pas la plus optimale et il faut privilégier le RMSLE.

En réalité l’utilisation du RMSLE permet uniquement de minimiser les erreurs des données d’eu aux différentes échelles ainsi que celle outliers. Dans une comparaison entre deux modèles distincts, le RMSE peut être suffisant. Cependant, ici nous allons comparer potentiellement n modèle, avec n préprocesseur, dans n cas. Le RMSE va donc vite être limité !

Remarque : avec le RMSLE il ne faut pas avoir de valeurs négatives et surtout n’avoir aucune valeur inférieure à 1. Compte tenu des potentiels résultats prédits, nous allons avoir deux manières de calculer le RMSLE : avec le log et le log + 1. Les résultats doivent théoriquement renvoyer le même résultat, sauf si une partie des données prédites se trouvent être entre – l’infinie et 0. Ainsi nous privilégierons le meilleur résultat parmi ces deux méthodes 😉

In [66]:
ytest = y_test

ypred = y_test_pred_1
print("RMSLE 1 :")
print(np.sqrt(mean_squared_log_error(ypred, ytest)))
print(np.sqrt(mean_squared_log_error(np.abs(ypred), np.abs(ytest))))
print(np.sqrt(np.mean((np.log1p(ypred, out=None) - np.log1p(ytest, out=None))**2)))

print("RMSE 1 :")
print(np.sqrt(mean_squared_error(np.abs(ypred), np.abs(ytest))))

ypred = y_test_pred_2
print("RMSLE 2 :")
print(np.sqrt(mean_squared_log_error(np.abs(ypred), np.abs(ytest))))
print(np.sqrt(np.mean((np.log1p(ypred, out=None) - np.log1p(ytest, out=None))**2)))

print("RMSE 2 :")
print(np.sqrt(mean_squared_error(np.abs(ypred), np.abs(ytest))))
RMSLE 1 :
0.24878928237424242
0.24878928237424242
0.2487892823742424
RMSE 1 :
61.0731631578581
RMSLE 2 :
0.5171634495426011
0.4099522135583395
RMSE 2 :
57.83806106017447
C:\Users\gjeanner\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:15: RuntimeWarning: invalid value encountered in log1p
  from ipykernel import kernelapp as app

Les résultats ici sont sans appel : le modèle du test 1 est bien plus performant que celui du test 2 et cela malgré à taux qui semblait être meilleur pour le RMSE. Nous pouvons aussi visualiser les tableaux associés aux résultats du test 1. Une seule chose à dire, c’est bien pour un premier jet.

In [67]:
df_moy_1.head(6)
Out[67]:
departement year month Valeur_Reel Valeur_Predict Difference_abs %_Error
0 978 2019 08 6.0 15.0 9.0 1.500000
1 37 2019 11 232.0 222.0 10.0 0.043103
2 49 2019 11 306.0 268.0 38.0 0.124183
3 2B 2019 07 20.0 20.0 0.0 0.000000
4 26 2018 01 309.0 304.0 5.0 0.016181
5 69 2018 07 1243.0 1162.0 81.0 0.065165
In [68]:
df_moy_2.head(6)
Out[68]:
departement year month Valeur_Reel Valeur_Predict Difference_abs %_Error
0 978 2019 08 6.0 6.90625 0.90625 0.151042
1 37 2019 11 232.0 272.53125 40.53125 0.174704
2 49 2019 11 306.0 301.03125 4.96875 0.016238
3 2B 2019 07 20.0 13.12500 6.87500 0.343750
4 26 2018 01 309.0 281.56250 27.43750 0.088794
5 69 2018 07 1243.0 1398.12500 155.12500 0.124799

3.2. Industrialisation du processus de prédiction

Maintenant que la première partie est terminée et que les grandes étapes pour « ce modèle » ont été définies, nous pouvons mettre en place la base d’un processus de prédiction type « industriel ». Pour cela il va falloir « automatiser » toutes les « étapes » précédentes. Commençons d’abord par importer les modules nécessaires.

In [69]:
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, Normalizer, OneHotEncoder
from sklearn.model_selection import train_test_split

from sklearn.linear_model import LinearRegression
from sklearn.ensemble import RandomForestRegressor
from sklearn.tree import DecisionTreeRegressor
from sklearn.svm import SVR

from joblib import dump, load

Définissons ensuite les variables nécessaires à notre processus avec notamment :

  • Les variables nécessaires,
  • Les différents modèles devant être utilisés,
  • Le tableau des scores (qui servira à comparer les différents résultats de modèles),
  • Les dictionnaires qui vont récapituler les données utilisables dans le processus (équivalent à un mock)
In [70]:
########################################
# Define input & array columns
input_columns = ['departement','year','month']
array_input_columns = np.asarray(input_columns)

########################################
# Define model regressor
cart_ml = DecisionTreeRegressor(criterion='mse')
rf_ml = RandomForestRegressor()
reg_ml = LinearRegression()
svr_ml = SVR()

models = [
    {
        'name':'cart',
        'model':cart_ml
    },
    {
        'name':'random forest',
        'model':rf_ml
    },
    {
        'name':'regression linéaire',
        'model':reg_ml
    },
    {
        'name':'SVR',
        'model':svr_ml
    }
]

########################################
# Préparation du tableau de score
columns = [
    'Dictionnaire',
    'ValeurPredict',
    'PreProcessing',
    'SCORING_Type',
    'Model',
    'SCORE_Test',
    'Err_Moy_Test',
    'SCORE_Val',
    'Err_Moy_Val'
]

data = {
    'Dictionnaire':["Nom du dictionnaire utilisé"],
    'ValeurPredict':["Nom de la variable"],
    'PreProcessing':["Pré-processus"],
    'SCORING_Type':['Nom du type de score'],
    'Model':["Nom du model"],
    'SCORE_Test':["0"],
    'Err_Moy_Test':["0"],
    'SCORE_Val':["0"],
    'Err_Moy_Val':["0"]
}

df_result = pd.DataFrame(data = data, columns = columns)
df_result = df_result.iloc[1:]

df_result['SCORE_Test'] = df_result['SCORE_Test'].astype(float)
df_result['Err_Moy_Test'] = df_result['Err_Moy_Test'].astype(float)
df_result['SCORE_Val'] = df_result['SCORE_Val'].astype(float)
df_result['Err_Moy_Val'] = df_result['Err_Moy_Val'].astype(float)

########################################
# Dictionnaire
####################
### Cambriolage
cambriolage_columns = df.filter(regex=(".*[Cc]ambriolage?s.*")).columns.values
other_cambriolage_columns = [
    'Cambriolages de résidences secondaires',
    'Cambriolages de locaux industriels, commerciaux ou financiers',
    "Cambriolages d'autres lieux"
]

# Dictionnaire
cambriolage_case = {
    'column_to_use':[
        np.concatenate((cambriolage_columns, array_input_columns), axis=None),
        np.concatenate(("Cambriolages de locaux d'habitations principales", array_input_columns), axis=None),
        np.concatenate((other_cambriolage_columns, array_input_columns), axis=None)
    ],
    'case':[cambriolage_columns,None,other_cambriolage_columns],
    'champs_to_predict':["Total_Cambriolage","Cambriolages de locaux d'habitations principales","Autre"],
    'date':('2018','2019'),
    'name':'cambriolage_case'
}

####################
# Homicide et tentative
# 2018 2019
# Homicide séparation
all_homicides_columns = df.filter(regex=(".*[Hh]omicide?s.*")).columns.values

only_homicides_columns = df.filter(regex=(".*Homicides.*")).columns.values
only_tentative_homicides_columns = df.filter(regex=(".*homicides.*")).columns.values

murder_case = {
    'column_to_use':[
        np.concatenate((only_homicides_columns, array_input_columns), axis=None),
        np.concatenate((only_tentative_homicides_columns, array_input_columns), axis=None)
    ],
    'case':[only_homicides_columns,only_tentative_homicides_columns],
    'champs_to_predict':["Total Homicide","Total tenta Homicide"],
    'date':('2018','2019'),
    'name':'murder_case'
}

####################
# les vols :
# Vols à main (3 cas) 2017 2019

vols_with_hands_column = df.filter(regex=(".*Vols à main.*")).columns.values
other_steal_columns = [
    'Vols à main armée contre des établissements financiers',
    'Vols à main armée contre des entreprises de transports de fonds',
    'Vols à main armée contre des particuliers à leur domicile'
]

theft_with_hand_case = {
    'column_to_use':[
        np.concatenate((vols_with_hands_column, array_input_columns), axis=None),
        np.concatenate(("Vols à main armée contre des éts industriels ou commerciaux", array_input_columns), axis=None),
        np.concatenate((other_steal_columns, array_input_columns), axis=None)
    ],
    'case':[vols_with_hands_column,None,other_steal_columns],
    'champs_to_predict':["Total vol main","Vols à main armée contre des éts industriels ou commerciaux","Autre Vol Main"],
    'date':('2018','2019'),
    'name':'theft_with_hand_case'
}

# Vols spécifique (3 cas) 2016 2019
vols_specific_column = ['Vols à la tire', "Vols à l'étalage", 'Vols à la roulotte']

specific_theft_case = {
    'column_to_use':[
        np.concatenate(('Vols à la tire', array_input_columns), axis=None),
        np.concatenate(("Vols à l'étalage", array_input_columns), axis=None),
        np.concatenate(('Vols à la roulotte', array_input_columns), axis=None)
    ],
    'case':[None,None,None],
    'champs_to_predict':['Vols à la tire',"Vols à l'étalage",'Vols à la roulotte'],
    'date':('2016','2019'),
    'name':'specific_theft_case'
}

# Vols violent (1 cas) 2018 2019
vols_violents_column = df.filter(regex=(".*Vols violents.*")).columns.values

violent_theft_case = {
    'column_to_use':[
        np.concatenate((vols_violents_column, array_input_columns), axis=None)
    ],
    'case':[vols_violents_column],
    'champs_to_predict':["Total vol violent"],
    'date':('2018','2019'),
    'name':'violent_theft_case'
}

# Vols simple
vols_simple_column = df.filter(regex=(".*simple.*")).columns.values

other_steal_2_columns = [
    'Vols simples sur chantier',
    'Vols simples sur exploitations agricoles',
    'Autres vols simples contre des établissements publics ou privés'
]

simple_theft_case = {
    'column_to_use':[
        np.concatenate((vols_simple_column, array_input_columns), axis=None),
        np.concatenate(('Autres vols simples contre des particuliers dans deslocaux privés', array_input_columns), axis=None),
        np.concatenate(('Autres vols simples contre des particuliers dans des locaux ou lieux publics', array_input_columns), axis=None),
        np.concatenate((other_steal_2_columns, array_input_columns), axis=None),
    ],
    'case':[vols_simple_column,None,None,other_steal_2_columns],
    'champs_to_predict':[
        "Total vol simple",
        'Autres vols simples contre des particuliers dans deslocaux privés',
        'Autres vols simples contre des particuliers dans des locaux ou lieux publics',
        'Autre vols simple'
    ],
    'date':('2016','2019'),
    'name':'simple_theft_case'
}

Ensuite, fonctionnalisons tous points nécessaires aux traitements de ces données :

  • La préparation des données d’input
  • Le préprocesseur (l’optimisation et la réduction de code n’ont pas été prises en compte ici). Cette partie est l’une des plus modifiables, elle dépend à la fois des valeurs d’entrée et des modifications associées.
  • La prédiction des valeurs
  • L’évaluation des résultats avec la moyenne et le calcul du score en fonction du modèle
  • L’enregistrement du score
  • La modélisation d’un cas d’usage
In [71]:
# prepare data input
def df_prepare_data(df_input, column_to_use, case, champs, **kwargs):
    df = df_input.loc[:,column_to_use]
    if case is not None:
        df[champs] = df.loc[:,case].sum(axis=1)
        df = df.loc[:].drop(columns=case)
    if bool(kwargs.get('first')) or bool(kwargs.get('second')):
        df = df.loc[kwargs.get('first'):kwargs.get('seconde')]
    df = df.reset_index()
    return df

def modeling_pre_processor(**kwargs):
    preprocessor_case = kwargs.get('preprocessor_case')
    
    if preprocessor_case == 0:
        name = "SS year & OHE Dep, month"
        numeric_features = ['year']
        numeric_transformer = Pipeline(steps=[
            ('imputer', SimpleImputer(strategy='median')),
            ('scaler', StandardScaler())
        ])

        categorical_features = ['departement', 'month']
        categorical_transformer = Pipeline(steps=[
            ('imputer', SimpleImputer(strategy='constant', fill_value='missing')),
            ('onehot', OneHotEncoder(handle_unknown='ignore'))
        ])
        
        preprocessor = ColumnTransformer(
            transformers = [
                ('num', numeric_transformer, numeric_features),
                ('cat', categorical_transformer, categorical_features)
        ])
    
    elif preprocessor_case == 1:
        name = "N year & OHE Dep, month"
        
        numeric_features = ['year']
        numeric_transformer = Pipeline(steps=[
            ('imputer', SimpleImputer(strategy='median')),
            ('scaler', Normalizer())
        ])

        categorical_features = ['departement', 'month']
        categorical_transformer = Pipeline(steps=[
            ('imputer', SimpleImputer(strategy='constant', fill_value='missing')),
            ('onehot', OneHotEncoder(handle_unknown='ignore'))
        ])
        
        preprocessor = ColumnTransformer(
            transformers = [
                ('num', numeric_transformer, numeric_features),
                ('cat', categorical_transformer, categorical_features)
        ])
    
    elif preprocessor_case == 2:
        name = "OHE year, Dep, month"
        categorical_features = ['year','departement', 'month']
        categorical_transformer = Pipeline(steps=[
            ('imputer', SimpleImputer(strategy='constant', fill_value='missing')),
            ('onehot', OneHotEncoder(handle_unknown='ignore'))
        ])
        
        preprocessor = ColumnTransformer(
            transformers = [
                ('cat', categorical_transformer, categorical_features)
        ])

    return name, preprocessor


# Prediction resultats
def prediction_resultat(columns, X, Y_reel, Y_predict):
    df = pd.DataFrame(
        data = X,
        columns = columns
    )
    
    df["Valeur_Reel"] = Y_reel
    df["Valeur_Predict"] = Y_predict
    
    df["Difference_abs"] = abs(df["Valeur_Reel"]-df["Valeur_Predict"])
    df["%_Error"] = df["Difference_abs"]/df["Valeur_Reel"]
    
    return df

# recupère la moyenne
def get_mean(df, isNull=True):
    if isNull:
        df = df.loc[df["Valeur_Reel"] != 0]
        return df["%_Error"].mean()
    else:
        return df["%_Error"].mean()

# Methode de calculs des résultats RMSE
def score(ypred, ytest, score):
    assert len(ytest) == len(ypred)
    if score == "RMSLE_LOG1":
        return np.sqrt(np.mean((np.log1p(ypred, out=None) - np.log1p(ytest, out=None))**2))
    if score == "RMSLE":
        return np.sqrt(mean_squared_log_error(np.abs(ypred), np.abs(ytest)))

# RMSLE
# np.sqrt(mean_squared_log_error(np.abs(ypred), np.abs(ytest)))
# np.sqrt(np.mean((np.log1p(ypred, out=None) - np.log1p(ytest, out=None))**2))
# RMSE
# np.sqrt(mean_squared_error(np.abs(ypred), np.abs(ytest)))


# Enregistrement du score
def scoring(df, **kwargs):
    index = len(df.index)
    df.loc[index,'Dictionnaire'] = kwargs.get('Dictionnaire')
    df.loc[index,'ValeurPredict'] = kwargs.get('ValeurPredict')
    df.loc[index,'PreProcessing'] = kwargs.get('PreProcessing')
    df.loc[index,'Model'] = kwargs.get('Model')
    df.loc[index,'SCORING_Type'] = kwargs.get('SCORING_Type')
    df.loc[index,'SCORE_Test'] = kwargs.get('SCORE_Test')
    df.loc[index,'Err_Moy_Test'] = kwargs.get('Err_Moy_Test')
    df.loc[index,'SCORE_Val'] = kwargs.get('SCORE_Val')
    df.loc[index,'Err_Moy_Val'] = kwargs.get('Err_Moy_Val')
    return df

def run_dictionnary_case(df_main, df_result, dictionary_case, score_type, **kwargs):
    isDisplay = kwargs.get('isDisplay')
    if isDisplay:
        print("Start dictionary case " + dictionary_case['name'])
    
    for i in range(len(dictionary_case['column_to_use'])):
        if isDisplay:
            print("Case " + str(i+1) + "/" + str(len(dictionary_case['column_to_use'])) + " : " + dictionary_case['champs_to_predict'][i])

        champs_to_predict = dictionary_case['champs_to_predict'][i]

        ##################################################
        # Préparation des données d'input
        df_ml = df_prepare_data(
            df_input = df_main,
            column_to_use = dictionary_case['column_to_use'][i],
            champs = champs_to_predict,
            case = dictionary_case['case'][i],
            first = dictionary_case['date'][0],
            second = dictionary_case['date'][1]
        )

        values_to_drop = [champs_to_predict,'date']

        X = df_ml.drop(labels = values_to_drop, axis=1)
        y = df_ml[champs_to_predict]
        
        #########################
        # Train & Test
        X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
        y_test = pd.Series(y_test, dtype='int32')
        
        #########################
        # Validation
        df_val = df_prepare_data(
            df_input = df_main[df_main['year'] == 2020],
            column_to_use = dictionary_case['column_to_use'][i],
            champs = champs_to_predict,
            case = dictionary_case['case'][i]
        )
        
        X_val = df_val.drop(labels = values_to_drop, axis=1)
        y_val = df_val[champs_to_predict]
        
        ##################################################
        # Modeling pre_processor pipeline
        pre_processor_name, preprocessor = modeling_pre_processor(
            preprocessor_case = kwargs.get('preprocessor_case')
        )
        
        ##################################################
        # Define current pipeline
        for model in models:
            model_processing = Pipeline(
                steps = [
                    ('preprocessor', preprocessor),
                    ('classifier', model['model'])
            ])
            model_processing.fit(X_train, y_train)
            
            #########################
            # Output modeling 
            filename = ''.join([
                'resultat/model/',
                dictionary_case['name'] + '_',
                champs_to_predict + '_',
                pre_processor_name + '_',
                model['name'] + '_',
                score_type + '_' + '.joblib'
            ])
            filename = filename.replace(" ", "_")
            dump(model_processing, filename) 
            
            #########################
            # Prédiction test
            y_test_pred = model_processing.predict(X_test)
            df_ml_res_test = prediction_resultat(
                columns = input_columns,
                X = X_test,
                Y_reel = y_test,
                Y_predict = y_test_pred
            )
            
            #########################
            # Prédiction val
            y_val_pred = model_processing.predict(X_val)
            df_ml_res_val = prediction_resultat(
                columns = input_columns,
                X = X_val,
                Y_reel = y_val,
                Y_predict = y_val_pred
            )
            
            #########################
            # Enregistrement
            score_test = score(y_test_pred, y_test, score=score_type)
            Err_Moy_Test = (get_mean(df_ml_res_test)*100)
            score_val = score(y_val_pred, y_val, score=score_type)
            Err_Moy_Val = (get_mean(df_ml_res_val)*100)
            
            #########################
            # Enregistrement du score
            df_result = scoring(
                df = df_result,
                Dictionnaire = dictionary_case['name'],
                ValeurPredict = champs_to_predict,
                PreProcessing = pre_processor_name,
                Model = model['name'],
                SCORING_Type = score_type,
                SCORE_Test = score_test,
                Err_Moy_Test = Err_Moy_Test,
                SCORE_Val = score_val,
                Err_Moy_Val = Err_Moy_Val
            )
            
            #########################
            # Affichage
            if isDisplay:
                print("Model : " + model['name'])
                print("\tScore test : " + str(score_test))
                print("\t% Err Moy test : " + str(round(Err_Moy_Test,3)) + " %")
                print("\tScore val : " + str(score_val))
                print("\t% Err Moy val : " + str(round(Err_Moy_Val,3)) + " %")
            
        if isDisplay:
            print("\n")

Voici le code pour faire tourner la partie sur l’ensemble des modèles configurer dans le dictionnaire modèle.

Exemple 1 : run_dictionnary_case( df_main = df_all, df_result = df_result, dictionary_case = cambriolage_case, preprocessor_case = 2, score_type = "RMSLE", isDisplay = True )

Exemple 2 : run_dictionnary_case( df_main = df_all, df_result = df_result, dictionary_case = cambriolage_case, preprocessor_case = 2, score_type = "RMSLE_LOG1", isDisplay = False )

Remarque : nous n’allons pas l’exécuter, car nous ne voulons de score en doublon.

Remarque (2) : les modèles d’apprentissage choisi n’ont pas été configurés. En effet, ce travail sert de modèle d’évaluation et de prédiction sur le processus à suivre pour industrialiser une série de « champs à prédire ».

Par ailleurs, les couches complémentaires telles que la paramétrisation (par défaut, simple, use case), l’ajout des modèles ensembliste (parallèle, séquentielle), l’ajustage des données d’input / pre-processing, le grid search (hypertuning) sont des possibilités, des étapes qui peuvent être réalisé et bien entendu ajouter à ce cas d’usage. Toutefois, à la vue du faible nombre des dimensions, l’ajout de ces couches ne semble pas être pertinent. 😊 Bien entendu, en les ajoutant, nous pourrions (encore) améliorer les résultats de nos modèles 😊

In [72]:
import time 

Case_to_train = [
    cambriolage_case,
    murder_case,
    theft_with_hand_case,
    specific_theft_case,
    violent_theft_case,
    simple_theft_case
]

score_type = ["RMSLE_LOG1","RMSLE"]

case = 0
tmp_global = 0
i = 1
for element in Case_to_train:
    print("Dict num " + str(i) + " on " + str(len(Case_to_train)))
    for j in range(3):
        tmps1 = time.time()
        print("\tpre processor " + str(j+1))
        for k in score_type:
            case += 1
            run_dictionnary_case(
                df_main = df_all,
                df_result = df_result,
                dictionary_case = element,
                preprocessor_case = j,
                score_type = k,
                isDisplay = False
            )
        tmps2 = time.time()-tmps1
        tmp_global = tmp_global + tmps2
        print("\tTps exe prepro %f seconde(s)" %tmps2)
    i = i + 1
tmp_global = tmp_global/60
print("tps execution global : %f min(s)" %tmp_global)
print("nb total treat : " + str(case))
Dict num 1 on 6
	pre processor 1
C:\Users\gjeanner\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:99: RuntimeWarning: invalid value encountered in log1p
C:\Users\gjeanner\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:99: RuntimeWarning: invalid value encountered in log1p
C:\Users\gjeanner\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:99: RuntimeWarning: invalid value encountered in log1p
	Tps exe prepro 26.290304 seconde(s)
	pre processor 2
C:\Users\gjeanner\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:99: RuntimeWarning: invalid value encountered in log1p
C:\Users\gjeanner\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:99: RuntimeWarning: invalid value encountered in log1p
C:\Users\gjeanner\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:99: RuntimeWarning: invalid value encountered in log1p
	Tps exe prepro 22.531874 seconde(s)
	pre processor 3
C:\Users\gjeanner\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:99: RuntimeWarning: invalid value encountered in log1p
C:\Users\gjeanner\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:99: RuntimeWarning: invalid value encountered in log1p
C:\Users\gjeanner\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:99: RuntimeWarning: invalid value encountered in log1p
	Tps exe prepro 26.700175 seconde(s)
Dict num 2 on 6
	pre processor 1
	Tps exe prepro 12.088228 seconde(s)
	pre processor 2
	Tps exe prepro 9.724017 seconde(s)
	pre processor 3
	Tps exe prepro 16.083294 seconde(s)
Dict num 3 on 6
	pre processor 1
	Tps exe prepro 20.060955 seconde(s)
	pre processor 2
	Tps exe prepro 13.307446 seconde(s)
	pre processor 3
	Tps exe prepro 17.723360 seconde(s)
Dict num 4 on 6
	pre processor 1
C:\Users\gjeanner\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:99: RuntimeWarning: invalid value encountered in log1p
C:\Users\gjeanner\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:99: RuntimeWarning: invalid value encountered in log1p
C:\Users\gjeanner\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:99: RuntimeWarning: invalid value encountered in log1p
	Tps exe prepro 56.525328 seconde(s)
	pre processor 2
C:\Users\gjeanner\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:99: RuntimeWarning: invalid value encountered in log1p
C:\Users\gjeanner\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:99: RuntimeWarning: invalid value encountered in log1p
C:\Users\gjeanner\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:99: RuntimeWarning: invalid value encountered in log1p
	Tps exe prepro 40.944492 seconde(s)
	pre processor 3
C:\Users\gjeanner\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:99: RuntimeWarning: invalid value encountered in log1p
C:\Users\gjeanner\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:99: RuntimeWarning: invalid value encountered in log1p
C:\Users\gjeanner\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:99: RuntimeWarning: invalid value encountered in log1p
	Tps exe prepro 64.021827 seconde(s)
Dict num 5 on 6
	pre processor 1
C:\Users\gjeanner\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:99: RuntimeWarning: invalid value encountered in log1p
	Tps exe prepro 7.863495 seconde(s)
	pre processor 2
C:\Users\gjeanner\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:99: RuntimeWarning: invalid value encountered in log1p
	Tps exe prepro 6.836257 seconde(s)
	pre processor 3
C:\Users\gjeanner\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:99: RuntimeWarning: invalid value encountered in log1p
	Tps exe prepro 12.315713 seconde(s)
Dict num 6 on 6
	pre processor 1
C:\Users\gjeanner\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:99: RuntimeWarning: invalid value encountered in log1p
C:\Users\gjeanner\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:99: RuntimeWarning: invalid value encountered in log1p
C:\Users\gjeanner\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:99: RuntimeWarning: invalid value encountered in log1p
C:\Users\gjeanner\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:99: RuntimeWarning: invalid value encountered in log1p
	Tps exe prepro 74.486137 seconde(s)
	pre processor 2
C:\Users\gjeanner\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:99: RuntimeWarning: invalid value encountered in log1p
C:\Users\gjeanner\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:99: RuntimeWarning: invalid value encountered in log1p
C:\Users\gjeanner\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:99: RuntimeWarning: invalid value encountered in log1p
C:\Users\gjeanner\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:99: RuntimeWarning: invalid value encountered in log1p
	Tps exe prepro 43.942357 seconde(s)
	pre processor 3
C:\Users\gjeanner\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:99: RuntimeWarning: invalid value encountered in log1p
C:\Users\gjeanner\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:99: RuntimeWarning: invalid value encountered in log1p
C:\Users\gjeanner\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:99: RuntimeWarning: invalid value encountered in log1p
C:\Users\gjeanner\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:99: RuntimeWarning: invalid value encountered in log1p
	Tps exe prepro 69.661269 seconde(s)
tps execution global : 9.018442 min(s)
nb total treat : 36

Les dictionnaires ont été exécuté, bien entendu, pendant le déroulement du processus, des copies des modèles ont été réalisées en locales. Passons maintenant à l’évaluation de ces modèles.

3.3. Évaluation et comparaison

Voici un aperçu du tableau des résultats.

In [73]:
print(df_result.shape)
df_result.head(13)
(384, 9)
Out[73]:
Dictionnaire ValeurPredict PreProcessing SCORING_Type Model SCORE_Test Err_Moy_Test SCORE_Val Err_Moy_Val
0 cambriolage_case Total_Cambriolage SS year & OHE Dep, month RMSLE_LOG1 cart 0.300155 22.898736 0.248358 12.665617
1 cambriolage_case Total_Cambriolage SS year & OHE Dep, month RMSLE_LOG1 random forest 0.273890 20.532997 0.304159 23.378687
2 cambriolage_case Total_Cambriolage SS year & OHE Dep, month RMSLE_LOG1 regression linéaire 0.558125 68.580115 0.527903 79.738529
3 cambriolage_case Total_Cambriolage SS year & OHE Dep, month RMSLE_LOG1 SVR 1.310582 310.003551 1.294113 222.704528
4 cambriolage_case Cambriolages de locaux d'habitations principales SS year & OHE Dep, month RMSLE_LOG1 cart 0.496274 42.474858 0.521364 35.880422
5 cambriolage_case Cambriolages de locaux d'habitations principales SS year & OHE Dep, month RMSLE_LOG1 random forest 0.428450 36.470959 0.596565 50.852521
6 cambriolage_case Cambriolages de locaux d'habitations principales SS year & OHE Dep, month RMSLE_LOG1 regression linéaire 0.677361 89.711245 0.728742 138.051373
7 cambriolage_case Cambriolages de locaux d'habitations principales SS year & OHE Dep, month RMSLE_LOG1 SVR 1.361102 229.487608 1.366249 228.390462
8 cambriolage_case Autre SS year & OHE Dep, month RMSLE_LOG1 cart 0.310720 24.944262 0.198834 9.183735
9 cambriolage_case Autre SS year & OHE Dep, month RMSLE_LOG1 random forest 0.251816 20.230225 0.190565 14.764504
10 cambriolage_case Autre SS year & OHE Dep, month RMSLE_LOG1 regression linéaire 0.363569 24.062095 0.360824 30.149213
11 cambriolage_case Autre SS year & OHE Dep, month RMSLE_LOG1 SVR 1.127010 171.097732 1.104701 128.748785
12 cambriolage_case Total_Cambriolage SS year & OHE Dep, month RMSLE cart 0.301081 22.792864 0.252022 12.662297

Maintenant rechercherons pour chaque valeur prédite quels sont les meilleurs résultats effectués sur l’année 2020.

Voici un exemple de condition possible :

acceptable_SCORE_value = 0.3 ERR_Moy = 30

condition_dict = (df_result['Dictionnaire'] == 'cambriolage_case')
condition_VP = (df_result['ValeurPredict'] == 'Total_Cambriolage')
condition_SCORE = (df_result['SCORE_Test'] < acceptable_SCORE_value) | (df_result['SCORE_Val'] < acceptable_SCORE_value)
condition_ERR = (df_result['Err_Moy_Test'] < ERR_Moy) | (df_result['Err_Moy_Val'] < ERR_Moy)
condition = condition_dict & condition_VP & condition_SCORE & condition_ERR

df_result.loc[condition]

Mais nous allons privilégier la simplicité 😊

In [74]:
best_scores = df_result.groupby(['Dictionnaire','ValeurPredict']).idxmin()['SCORE_Val']
resultats = df_result.loc[best_scores].reset_index().drop(columns=['index'])
resultats
Out[74]:
Dictionnaire ValeurPredict PreProcessing SCORING_Type Model SCORE_Test Err_Moy_Test SCORE_Val Err_Moy_Val
0 cambriolage_case Autre OHE year, Dep, month RMSLE_LOG1 random forest 0.246848 19.886025 0.182524 14.423914
1 cambriolage_case Cambriolages de locaux d'habitations principales OHE year, Dep, month RMSLE cart 0.501010 42.781469 0.517002 35.502995
2 cambriolage_case Total_Cambriolage OHE year, Dep, month RMSLE_LOG1 cart 0.297517 22.629192 0.238896 12.160124
3 murder_case Total Homicide OHE year, Dep, month RMSLE_LOG1 random forest 0.480119 68.281784 0.308170 39.347804
4 murder_case Total tenta Homicide OHE year, Dep, month RMSLE random forest 0.614208 75.875747 0.429616 49.409478
5 simple_theft_case Autre vols simple SS year & OHE Dep, month RMSLE cart 0.344079 27.796138 0.308312 18.394739
6 simple_theft_case Autres vols simples contre des particuliers da... OHE year, Dep, month RMSLE cart 0.346370 24.143512 0.471748 26.523460
7 simple_theft_case Autres vols simples contre des particuliers da... SS year & OHE Dep, month RMSLE_LOG1 cart 0.289119 21.288646 0.270960 14.997607
8 simple_theft_case Total vol simple OHE year, Dep, month RMSLE cart 0.278344 18.373772 0.335847 18.312685
9 specific_theft_case Vols à l'étalage OHE year, Dep, month RMSLE_LOG1 cart 0.444777 40.112482 0.407463 26.322469
10 specific_theft_case Vols à la roulotte OHE year, Dep, month RMSLE_LOG1 cart 0.367492 30.068790 0.357330 22.653377
11 specific_theft_case Vols à la tire SS year & OHE Dep, month RMSLE cart 0.535604 44.825406 0.669687 56.962622
12 theft_with_hand_case Autre Vol Main OHE year, Dep, month RMSLE_LOG1 cart 0.452248 83.219395 0.246578 24.586667
13 theft_with_hand_case Total vol main OHE year, Dep, month RMSLE_LOG1 random forest 0.501692 66.658214 0.386812 45.888976
14 theft_with_hand_case Vols à main armée contre des éts industriels o... OHE year, Dep, month RMSLE SVR 0.446645 64.874797 0.365859 51.320605
15 violent_theft_case Total vol violent SS year & OHE Dep, month RMSLE_LOG1 random forest 0.418868 44.211435 0.450564 55.446051

Nous pouvons tout de suite remarquer que les modèles n’ont pas tous donné le même niveau de résultat. Par exemple, le nombre « total de cambriolage » ou les « Autres vols simples contrent des particuliers dans des locaux ou lieux publics » ont des prédictions très intéressantes. À l’inverse le nombre de vols à la tire lui est l’un des plus mauvais scores de cette synthèse. Mauvais score pouvant être justifié par le confinement.

Mise à jour : les premiers résultats (sur janvier à mars) étaient pas mal du tout, cependant lorsque j’ai repris ce projet, les évènements ont amoindri les résultats attendus. Bien entendu, cela a eu un impact sur nos prévisions, les rendant « moins » performantes.

In [75]:
resultats.loc[resultats['SCORE_Val'] < 0.4]
Out[75]:
Dictionnaire ValeurPredict PreProcessing SCORING_Type Model SCORE_Test Err_Moy_Test SCORE_Val Err_Moy_Val
0 cambriolage_case Autre OHE year, Dep, month RMSLE_LOG1 random forest 0.246848 19.886025 0.182524 14.423914
2 cambriolage_case Total_Cambriolage OHE year, Dep, month RMSLE_LOG1 cart 0.297517 22.629192 0.238896 12.160124
3 murder_case Total Homicide OHE year, Dep, month RMSLE_LOG1 random forest 0.480119 68.281784 0.308170 39.347804
5 simple_theft_case Autre vols simple SS year & OHE Dep, month RMSLE cart 0.344079 27.796138 0.308312 18.394739
7 simple_theft_case Autres vols simples contre des particuliers da... SS year & OHE Dep, month RMSLE_LOG1 cart 0.289119 21.288646 0.270960 14.997607
8 simple_theft_case Total vol simple OHE year, Dep, month RMSLE cart 0.278344 18.373772 0.335847 18.312685
10 specific_theft_case Vols à la roulotte OHE year, Dep, month RMSLE_LOG1 cart 0.367492 30.068790 0.357330 22.653377
12 theft_with_hand_case Autre Vol Main OHE year, Dep, month RMSLE_LOG1 cart 0.452248 83.219395 0.246578 24.586667
13 theft_with_hand_case Total vol main OHE year, Dep, month RMSLE_LOG1 random forest 0.501692 66.658214 0.386812 45.888976
14 theft_with_hand_case Vols à main armée contre des éts industriels o... OHE year, Dep, month RMSLE SVR 0.446645 64.874797 0.365859 51.320605

3.4. Prédiction

Maintenant que nos modèles sont définis, nous allons réaliser un peu de prévision. Nous allons reprendre la première prévision de l’année 2020 puis réaliser une seconde pour cet été (en espérant que le confinement soit terminé d’ici là !).

In [76]:
# Jeu de donnée input
x_values = []

departements = all_name_sheet
months = ['01','02','03','04','05','06','07','08']
year = '2020'

for dep in departements:
    for month in months:
        elem = [dep,year,month]
        x_values.append(elem)

df_prediction = pd.DataFrame(
    data = x_values,
    columns = input_columns
)

# Chargement du modèle
dir_path = 'resultat/model/'
filename = dir_path + 'cambriolage_case_Total_Cambriolage_OHE_year,_Dep,_month_cart_RMSLE_.joblib'
model = load(filename)


# Reprise pre transfo
pre_processor_name, preprocessor = modeling_pre_processor(
    preprocessor_case = 2
)

# Définition pipeline
model_processing = Pipeline(
    steps = [
        ('preprocessor', preprocessor),
        ('classifier', model)
    ])

# Prévision
y_pred = model.predict(df_prediction)

df_prediction["Estimation du Total Cambriolage"] = y_pred
df_prediction
Out[76]:
departement year month Estimation du Total Cambriolage
0 01 2020 01 477.0
1 01 2020 02 319.0
2 01 2020 03 212.0
3 01 2020 04 117.0
4 01 2020 05 248.0
... ... ... ... ...
851 988 2020 04 260.0
852 988 2020 05 160.0
853 988 2020 06 250.0
854 988 2020 07 197.0
855 988 2020 08 260.0

856 rows × 4 columns

Focalisons-nous sur le département des Bouches-du-Rhône.

In [77]:
df_prediction.loc[df_prediction.departement == '13']
Out[77]:
departement year month Estimation du Total Cambriolage
96 13 2020 01 1553.0
97 13 2020 02 1598.0
98 13 2020 03 1550.0
99 13 2020 04 1339.0
100 13 2020 05 1371.0
101 13 2020 06 1180.0
102 13 2020 07 1598.0
103 13 2020 08 1513.0

Regardons la différence en fonction des taux d’erreur moyens constatés entre prédiction et réel.

In [78]:
# Condition d'analyse
condition = (df_all['year']==2020) & (df_all['departement']=='13')
df_comp = df_all.loc[condition].set_index('month')

comparaison = df_prediction.loc[df_prediction.departement == '13'].set_index('month')
comparaison["Reel"] = df_comp.loc[:,cambriolage_columns].sum(axis=1)
comparaison["Difference"] = np.abs(comparaison["Estimation du Total Cambriolage"] - comparaison["Reel"])

taux_error = 0.13
cond_1 = (comparaison["Reel"] < round(comparaison["Estimation du Total Cambriolage"] * (1+taux_error)))
cond_2 = (comparaison["Reel"] > round(comparaison["Estimation du Total Cambriolage"] * (1-taux_error)))
condition = cond_1 & cond_2
comparaison["Résultat 1x tx err"] = condition

taux_error = 0.13 * 2
cond_1 = (comparaison["Reel"] < round(comparaison["Estimation du Total Cambriolage"] * (1+taux_error)))
cond_2 = (comparaison["Reel"] > round(comparaison["Estimation du Total Cambriolage"] * (1-taux_error)))
condition = cond_1 & cond_2
comparaison["Résultat 2x tx err"] = condition

comparaison["Intervalle de validation +"] = round(comparaison["Estimation du Total Cambriolage"] * (1+taux_error))
comparaison["Intervalle de validation -"] = round(comparaison["Estimation du Total Cambriolage"] * (1-taux_error))
comparaison
Out[78]:
departement year Estimation du Total Cambriolage Reel Difference Résultat 1x tx err Résultat 2x tx err Intervalle de validation + Intervalle de validation -
month
01 13 2020 1553.0 1553.0 0.0 True True 1957.0 1149.0
02 13 2020 1598.0 1258.0 340.0 False True 2013.0 1183.0
03 13 2020 1550.0 831.0 719.0 False False 1953.0 1147.0
04 13 2020 1339.0 455.0 884.0 False False 1687.0 991.0
05 13 2020 1371.0 1064.0 307.0 False True 1727.0 1015.0
06 13 2020 1180.0 NaN NaN False False 1487.0 873.0
07 13 2020 1598.0 NaN NaN False False 2013.0 1183.0
08 13 2020 1513.0 NaN NaN False False 1906.0 1120.0
  • Seul le mois de janvier correspond à une prédiction correcte.
  • Tous les autres mois ont des prédictions supérieures à la réalité (constat pouvant être justifié par la crise sanitaire).
  • En tenant compte de deux fois, l’erreur moyenne, les mois de janvier, février et avril deviennent des prédictions valides.

Malgré la situation actuelle (entrainant une baisse de performance), nous pouvons conclure que ces résultats sont satisfaisants 😊

Enfin, regardons les risques d’être touché par un cambriolage. Nous considérons que les risques d’être touché par un cambriolage sont identiques pour tous les habitants de chaque région. Que tous les habitants vivent dans des logements individuels et qu’une personne peut être victime que d’un unique cambriolage par ans (ces faits sont bien entendu faux, cela permet juste de simplifier le calcul). Aussi réalisons une simple division pour faire cette estimation.

In [79]:
nb_camb_13 = comparaison.iloc[5:8]['Estimation du Total Cambriolage'].sum(axis=0)
nb_pop_13 = df_population.loc[df_population['Departement'] == '13','Total'].values[0]

pourcentage_touche_par_camb = nb_camb_13 / nb_pop_13 * 100

print("Pourcentage d'être touché par un cambriolage cet été (pdv estimation) : " + str(round(pourcentage_touche_par_camb,2)) + " %")
Pourcentage d'être touché par un cambriolage cet été (pdv estimation) : 0.21 %

0,21 % soit environ 1 chance sur 500. C’est quand même beaucoup même s'il ne s'agit que d'une estimation haute.

4. Synthèse

4.1. Conclusion (SWOT)

Force

  • Ce projet a été un travail « from scratch », réalisé de manière totalement indépendante par pur loisir.
  • Les données utilisées sont issues de source gouvernementale. La qualité est donc théoriquement irréprochable.

Faiblesse

  • Le manque de variété des données entraine un petit nombre de biais / dimensions / variables explicatives pouvant justifier les actes.
  • La partie analyse à tendance à devenir chronophage, phénomène justifié notamment par le faible nombre de biais

Les opportunités liées à ce travail pourraient être matérialisées par les prochaines étapes envisageables :

  • Une collaboration avec les entités fournissant ces données pourrait permettre de consolider ce travail. Par exemple, l’obtention de donnée micro permettrai d’effectuer des prédictions sur potentiellement des villes, des quartiers ou même d'un point de vue journalier.
  • Développer une API pour permettre l’exploitation ouverte (et donc accessible) des résultats
  • La mise en place de ces étapes sur d’une plateforme distante pourrait permettre d’automatiser, la récolte des données, les phases d’apprentissage et de prédiction. De plus l’affichage et la partie pourraient être aussi automatisés afin d’être un peu plus « user friendly »
  • L’amélioration des performances des modèles moins performants par l’ajout de couche, l’ajout d’autres méthodes de pré-processing, l’ajout de modèle ensembliste parallèle et séquentielles, ou encore la paramétrisation des modèles ainsi que l’hypertuning.

Menace : Aucune à ma connaissance

4.2. Bilan

Je suis très content de ce travail. Toutefois il m’a demandé beaucoup de temps, notamment pour l’écriture des différents commentaires. J’ai consommé énormément d’énergie pour récupérer des jeux de données valides. Dans l’optique de me challenger, j’ai réalisé ce travail en parallèle des études, et du travail en entreprise. Ainsi je m’étais fixé comme date d’échéance fin juillet.

Malheureusement j’ai rapidement dû faire un choix quant aux jeux de données. Soit privilégier des données obscures avec davantage de potentiel biais ou favoriser la qualité au détriment de la variété. Mon choix s’est porté sur qualité afin de pouvoir plus rapidement démarrer des analyses.

Aujourd’hui, le domaine de la Data Science me fascine. Il est véritablement vaste, passionnant et je trouve épanouissant le cheminement menant à ce genre de réalisation. Toutefois, j’ai pu constater que beaucoup de personnes et d’entreprises ont du mal à percevoir la puissance qui peut se dégager de ce type de travaux. Peut-être par méconnaissance ou par réticence au changement ? Aussi par ce rapport, j’espère avoir permis de faciliter la compréhension et d’avoir donné l’opportunité à quelques personnes d’imaginer toutes les possibilités envisageables avec ces procédés.

Ce rapport est le premier travail que j’ai souhaité partager publiquement afin de montrer à quel point les modèles d’apprentissage automatique vulgairement appelé « intelligence artificielle » peuvent contribuer à répondre et résoudre des questions simples au premier abord qui peuvent tous nous toucher. J’espère avoir donné suffisamment de détail pour qu’il puisse être compris par tous.

Dans cette perspective, si vous êtes arrivé jusque-là, je serai ravie que vous poussiez vous aussi contribuer à ce travail en réalisant un retour. En effet, je pense qu’avoir les commentaires d’une communauté variée permettrait de mettre en lumière les points sur lesquelles je dois m’améliorer. Merci de votre attention ainsi qu’à Monsieur Adrien CHIFU, maitre de conférences en Science informatique de l’université Aix-Marseille pour les conseils avisés ainsi que la relecture.

Gaspard

In [ ]: